java8 将对象根据某一属性分组

将对象根据某一属性分组,属性相同的对象,放在一个列表

假设 现有一组Student的列表List studentList,根据age对name分组

之前写法,studentList.stream().collect().(Collectors.toMap(Student::getAge,Student::getName));

发现后面的name把之前的覆盖了,age与name是一对一。

现想age与name是一对多

studentList.stream().collect().(Collectors.toMap(Student::getAge,student -> Lists.newArrayList(student),

(List newList,List oldList ) -> {oldList.addAll(newList);

return oldList;

}));

 

2020.2.28 再次遇到上次情况时,突然觉得好笑,根据某个属性分组,可以直接使用

Collectors.groupingBy,例如上面

studentList.stream().collect().(Collectors.groupingBy(Student::getAge));

之前的写法一般用于取一个实体,如

studentList.stream().collect(Collectors.toMap(Student::getUsername, Function.identity(), (key1, key2) -> key2))

可参考 https://my.oschina.net/u/4283994/blog/4169629

 

 

你可能感兴趣的:(java)