【实用工具】Stream转换之List转Map

实体类集合转Map

实体类

@Data
@AllArgsConstructor
public class Teacher{
    private  String no;  //教师号
    private  String name; //姓名
}

构造数据

        List<Teacher> list = new ArrayList();
        list.add(new Teacher("1001", "小A"));
        list.add(new Teacher("1001", "小B"));//学号重复(下面特殊处理)
        list.add(new Teacher("1002", "小C"));
        list.add(new Teacher("1003", "小D"));

不判断key重复

        Map<String, Teacher> map1 =
                list.stream().collect(Collectors.toMap(
                        Teacher::getNo,
                        Function.identity()
                ));

返回对象

        Map<String, Teacher> map2 =
                list.stream().collect(Collectors.toMap(
                        Teacher::getNo,
                        obj -> obj,
                        (key1, key2) -> key1
                ));

        Map<String, Teacher> map3 =
                list.stream().collect(Collectors.toMap(
                        Teacher::getNo,
                        Function.identity(),
                        (key1, key2) -> key1
                ));

返回属性

        Map<String, String> map4 =
                list.stream().collect(Collectors.toMap(
                        Teacher::getNo,
                        Teacher::getName,
                        (key1, key2) -> key1
                ));

按照某个属性分组

        Map<String, List<Teacher>> map5 =
                list.stream().collect(Collectors.groupingBy(Teacher::getNo));

按照多个属性分组

        Map<String, List<Teacher>> map6 =
                list.stream().collect(Collectors.groupingBy(obj -> obj.getNo() + "_" + obj.getName()));

Map集合转Map

构造数据

 List<Map<String, Object>> list = new ArrayList();
        Map<String, Object> data1 = new HashMap<>();
        data1.put("no", "1001");
        data1.put("name", "小A");
        Map<String, Object> data2 = new HashMap<>();
        data2.put("no", "1001");
        data2.put("name", "小B");
        Map<String, Object> data3 = new HashMap<>();
        data3.put("no", "1002");
        data3.put("name", "小C");
        Map<String, Object> data4 = new HashMap<>();
        data4.put("no", "1003");
        data4.put("name", "小D");
        list.add(data1);
        list.add(data2);
        list.add(data3);
        list.add(data4);

映射

Map<String, Map<String, Object>> map1 = list.stream().collect(Collectors.toMap(s -> s.get("no") + "", s -> s, (key1, key2) -> key1));

分组

Map<String, List<Map<String, Object>>> map2 = list.stream().collect(Collectors.groupingBy(s -> s.get("no") + ""));
System.out.println(map1);

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值