gpt4 book ai didi

java 8 流收集器映射 List 到 List

转载 作者:搜寻专家 更新时间:2023-11-01 02:01:55 25 4
gpt4 key购买 nike

假设我有这个类:

public class Employee{

private int id;
private List<Car> cars;
//getters , equals and hashcode by id
}

public class Car {
private String name;

}

我有一个员工列表(相同的 ID 可能重复):

List<Employee> emps =  ..

Map<Employee, List<List<Car>>> resultMap = emps.stream().collect(
Collectors.groupingBy(Function.identity(),
Collectors.mapping(Employee::getCars, Collectors.toList());

这给了我 Map<Employee, List<List<Car>>> ,我怎样才能得到 Map<Employee, List<Car> (像一个平面列表)?

最佳答案

我不明白你为什么在根本不进行任何分组时使用 groupingBy。看来您只需要创建一个 Map,其中 Employee 中的键和值是 Employee 的汽车:

Map<Employee, List<Car> map =
emps.stream().collect(Collectors.toMap(Function.identity(),Employee::getCars);

如果您要分组以加入同一 Employee 的两个实例,您仍然可以使用带有合并功能的 toMap:

Map<Employee, List<Car> map =
emps.stream()
.collect(Collectors.toMap(Function.identity(),
Employee::getCars,
(v1,v2)-> {v1.addAll(v2); return v1;},
HashMap::new);

请注意,这将改变 Employee::getCars 返回的一些原始 List,因此您可能想要创建一个新的 List 而不是将一个列表的元素添加到另一个列表。

关于java 8 流收集器映射 List<List> 到 List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43891826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com