• Java:List转Map (用stream实现)


    Java:List转Map (用stream实现)

    //实体类
    public class Student {
        private  String no;  //学号
        private  String name;	//姓名
        //构造方法忽略
        //set、get 方法忽略
    }
    public class Teacher{
        private  String no;  //教师号
        private  String name; //姓名
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    一、List<Object>Map<String, String>

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

    //将list转map (map的键重复不会报错,下面已经处理)
    Map<String, String> map =
    list.stream().collect(Collectors.toMap(
    Student::getNo,
    Student::getName,
    (key1 , key2) -> key2
    ));

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    二、List<Object>Map<String, Object> (返回对象本身)

    //声明一个List集合
    List<Student> list = new ArrayList();
    	list.add(new Student("1001", "小A"));
    	list.add(new Student("1001", "小B"));
    	list.add(new Student("1002", "小C"));
    	list.add(new Student("1003", "小D"));
    

    //将list转map (map的键去重)
    Map<String, Student> map =
    list.stream().collect(Collectors.toMap(
    Student::getNo,
    stu -> stu,
    (key1 , key2) -> key2
    ));

    或者

    //将list转map (map的键去重)
    Map<String, Student> map =
    list.stream().collect(Collectors.toMap(
    Student::getNo,
    Function.identity(),
    (key1 , key2) -> key2
    ));

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    三、List<Object2>Map<String, Object1> (返回另一个对象)

    //声明一个List集合
    List<Student> list = new ArrayList();
    	list.add(new Student("1001", "小A"));
    	list.add(new Student("1001", "小B"));
    	list.add(new Student("1002", "小C"));
    	list.add(new Student("1003", "小D"));
    

    //将list转map (map的键去重)
    Map<String, Teacher> map =
    list.stream().collect(Collectors.toMap(
    Student::getNo,
    stu -> {
    Teacher teacher = new Teacher();
    teacher.setNo(stu.getNo());
    teacher.setName(stu.getName());
    return teacher;
    },
    (key1 , key2) -> key2
    ));

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    四、List<Object>Map<String, List<Object>> (分组)

    //声明一个List集合
    List<Student> list = new ArrayList();
       list.add(new Student("1001", "小A"));
       list.add(new Student("1001", "小B"));
       list.add(new Student("1002", "小C"));
       list.add(new Student("1003", "小D"));
    

    //将list转map (以某个属性来分组,将分组后相同的map放在一起)
    Map<String, List<Student>> map =
    list.stream().collect( Collectors.groupingBy(Student::getNo) );

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    五、学习链接:

    https://blog.csdn.net/qq_39629277/article/details/83012548
    https://blog.csdn.net/lu930124

    https://blog.csdn.net/SeniorShen/article/details/120061248
  • 相关阅读:
    对于.net config文件中加密使用
    删除windows不想要的服务
    ora12514: tns: 监听程序当前无法识别连接描述符中请求的服务
    读《.NET设计规范》笔记
    创建服务总结
    加载XML文档
    XMLHttpRequest对象的使用
    ReportView控件的使用
    C#代码的编译过程
    Qt vs设置可执行程序图标
  • 原文地址:https://www.cnblogs.com/sunny3158/p/16610939.html
Copyright © 2020-2023  润新知