stream流中toMap的使用操作

stream流

Stream流引入

Lambda表达式,基于Lambda所带来的函数式编程,又引入了一个全新的Stream概念,用于解决集合类库。

测试的实体实例

 List<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("马六");

	List<User> listUser = new ArrayList<>();
        listUser.add(new User().setId(1).setName("张三"));
        listUser.add(new User().setId(2).setName("李四"));
        listUser.add(new User().setId(3).setName("王五"));
        listUser.add(new User().setId(3).setName("马六"));
1. 这种是将List集合转换为Map类型 以List种的值 做key与value:
Map<String, String> listMap = list.stream().collect(Collectors.toMap(x -> x, x -> x));
2. 这样是以实体中的id做map的key 以name作为key:
Map<Integer, User> listUserMap = listUser.stream().collect(Collectors.toMap(User::getId,User::getName));
3. 可以在map的key重复时进行调整 是使用oldValue还是newValue:
Map<Integer, User> listUserMap = listUser.stream().collect(Collectors.toMap(User::getId,User::getName,(oldValue, newValue) -> newValue)));
4. 也可以在在key重复的时候使用ArrayList<>将value打包为一个集合
Map<Integer,ArrayList<String>> listUserMap = listUser.stream().filter(x -> "1".equals(x.getUsername())).collect(Collectors.toMap(User::getId,
Lists.newArrayList(User::getName),(oldValue, newValue) -> {
						oldValue.addAll(newValue);
						return oldValue;
					})));
5. 也可以在转换为map类型前进行进行过滤操作:
Map<Integer, User> listUserMap = listUser.stream().filter(x -> "1".equals(x.getUsername())).collect(Collectors.toMap(User::getId,User::getName,(oldValue, newValue) -> newValue)));
6. toMap也可以转换的过程中对value的值进行一系列的操作:
//lists可以为任何类型的数据进行返回
Map<String, List<TaskList>> listUserMap = list.stream().collect(Collectors.toMap(UserDTO::getUsername, x -> {
            List<TaskList> lists = new ArrayList<>();
            return lists;
        }));
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值