groupingBy 是能够根据字段进行分组,toMap 是把 List 的数据格式转化成 Map 的格式,我
们写了一个 demo,如下:
@Test
public void testListToMap(){
// 学生根据名字进行分类
Map<String, List<StudentDTO>> map1 = students.stream()
.collect(Collectors.groupingBy(StudentDTO::getName));
log.info("testListToMap groupingBy 学生根据名字进行分类 result is Map<String,List<Student
JSON.toJSONString(map1));
// 统计姓名重名的学生有哪些
Map<String, Set<String>> map2 = students.stream()
.collect(Collectors.groupingBy(StudentDTO::getName,
Collectors.mapping(StudentDTO::getCode,Collectors.toSet())));
log.info("testListToMap groupingBy 统计姓名重名结果 is {}",
JSON.toJSONString(map2));
// 学生转化成学号为 key 的 map
Map<String, StudentDTO> map3 = students.stream()
//第一个入参表示 map 中 key 的取值
//第二个入参表示 map 中 value 的取值
//第三个入参表示,如果前后的 key 是相同的,是覆盖还是不覆盖,(s1,s2)->s1 表示不覆盖,(s
.collect(Collectors.toMap(s->s.getCode(),s->s,(s1,s2)->s1));
log.info("testListToMap groupingBy 学生转化成学号为 key 的 map result is{}",
JSON.toJSONString(map3));
}
运行结果如下: