List转Map,for循环?NO

  • 场景描述
    在工作中,经常会遇到这种情形:

    两组list信息,list1要使用list2的信息
    比如:用户users,部门departments,需要获取用户具体的部门信息

  • 实现

    • 使用for循环,这个应该都会
    for (Department department: departments) {
            maps.put(department.getId(), department);
        }
    
    • 另一种就是使用stream
    Map<Long, Department > maps = departments
                .stream().collect(Collectors.toMap(Department::getId, a->a, (key1, key2) -> key2));
                 //map的key: Department::getId
        // map的value: a->a (也有人用Function.identity()代替)
        // 防止有重复数据,产生报错,(key1, key2) -> key2 :有重复选新的
    
  • list 转Map<String, List<Map<String, Object>>>

    Map<String, List<Map<String, Object>>> users = allUsers
                .stream().collect(Collectors.groupingBy(a -> a.getDepartment(),
                        Collectors.mapping(a -> {
                                            Map<String, Object> user = new HashMap<>();
                                            user.put("value", a.getUserid());
                                            user.put("name", a.getName());
                                            user.put("type","user");
                                            return user;
                                            }, Collectors.toList())));
    

注意:
Function.identity()这个不能代替基本类型
看源码就知道了,泛型参数只能是对象:

static <T> Function<T, T> identity() {
        return t -> t;
    }
  • 结尾
  • 关于stream 流还有很多用法,我这边就不多累述了。

广告推广:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值