繁体   English   中英

java 8流收集器映射List <List>到List

[英]java 8 stream collector mapping List<List> to List

让我们说我有这个课程:

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而不是将一个列表的元素添加到另一个列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM