作者:保定联通员工 | 来源:互联网 | 2023-05-17 09:53
让我们说我有这个课程:publicclassEmployee{privateintid;privateListcars;getters,equalsandhashcode
让我们说我有这个课程:
public class Employee{
private int id;
private List cars;
//getters , equals and hashcode by id
}
public class Car {
private String name;
}
我有一个员工列表(相同的ID可能重复):
List emps = ..
Map>> resultMap = emps.stream().collect(
Collectors.groupingBy(Function.identity(),
Collectors.mapping(Employee::getCars, Collectors.toList());
这给了我Map>>,
如何获得Map (像平单一样)?
解决方法:
当你没有进行任何分组时,我不明白你为什么要使用groupingBy.您似乎只需要创建一个Map,其中Employee中的键和值是Employee的汽车:
Map map =
emps.stream().collect(Collectors.toMap(Function.identity(),Employee::getCars);
如果要进行分组以加入同一Employee的两个实例,您仍然可以使用带有合并功能的toMap:
Map map =
emps.stream()
.collect(Collectors.toMap(Function.identity(),
Employee::getCars,
(v1,v2)-> {v1.addAll(v2); return v1;},
HashMap::new);
请注意,这将改变Employee :: getCars返回的一些原始列表,因此您可能希望创建一个新列表,而不是将一个列表的元素添加到另一个列表.