groupingBy 是能够根据字段进行分组,toMap 是把 List 的数据格式转化成 Map 的格式,我
    们写了一个 demo,如下:

    1. @Test
    2. public void testListToMap(){
    3. // 学生根据名字进行分类
    4. Map<String, List<StudentDTO>> map1 = students.stream()
    5. .collect(Collectors.groupingBy(StudentDTO::getName));
    6. log.info("testListToMap groupingBy 学生根据名字进行分类 result is Map<String,List<Student
    7. JSON.toJSONString(map1));
    8. // 统计姓名重名的学生有哪些
    9. Map<String, Set<String>> map2 = students.stream()
    10. .collect(Collectors.groupingBy(StudentDTO::getName,
    11. Collectors.mapping(StudentDTO::getCode,Collectors.toSet())));
    12. log.info("testListToMap groupingBy 统计姓名重名结果 is {}",
    13. JSON.toJSONString(map2));
    14. // 学生转化成学号为 key 的 map
    15. Map<String, StudentDTO> map3 = students.stream()
    16. //第一个入参表示 map 中 key 的取值
    17. //第二个入参表示 map 中 value 的取值
    18. //第三个入参表示,如果前后的 key 是相同的,是覆盖还是不覆盖,(s1,s2)->s1 表示不覆盖,(s
    19. .collect(Collectors.toMap(s->s.getCode(),s->s,(s1,s2)->s1));
    20. log.info("testListToMap groupingBy 学生转化成学号为 key 的 map result is{}",
    21. JSON.toJSONString(map3));
    22. }

    运行结果如下:

    image.png