Java8中hashmap的嵌套arraylist

Java8中hashmap的嵌套arraylist,java,java-8,java-stream,Java,Java 8,Java Stream,我有以下物品- Company.java private String compName; private List<Department> departments; 我想返回每个员工法律声明的地图- Map<String, String> legalStatement = new HashMap<>(); 如何在Java 8流API中编写相同的东西。您可以使用流的过滤器来过滤if,平面图来过滤内部员工列表和收集作为映射收集: Map<String,

我有以下物品-

Company.java

private String compName;
private List<Department> departments;
我想返回每个员工法律声明的地图-

Map<String, String> legalStatement = new HashMap<>();

如何在Java 8流API中编写相同的东西。

您可以使用流的
过滤器
来过滤
if
平面图
来过滤内部
员工
列表和
收集
作为
映射收集:

Map<String, String> legalStatement = departments.stream()
        .filter(department -> department.getEmployees() != null && !department.getEmployees().isEmpty())
        .flatMap(department -> department.getEmployees().stream())
        .collect(Collectors.toMap(Employee::getEmpId, Employee::getLegalStatement));
Map legalStatement=departments.stream()
.filter(department->department.getEmployees()!=null&&!department.getEmployees().isEmpty())
.flatMap(department->department.getEmployees().stream())
.collect(Collectors.toMap(Employee::getEmpId,Employee::getLegalStatement));

您可以对
if
使用流的
过滤器
平面图
用于内部
员工
列表和
收集
收集为
地图

Map<String, String> legalStatement = departments.stream()
        .filter(department -> department.getEmployees() != null && !department.getEmployees().isEmpty())
        .flatMap(department -> department.getEmployees().stream())
        .collect(Collectors.toMap(Employee::getEmpId, Employee::getLegalStatement));
Map legalStatement=departments.stream()
.filter(department->department.getEmployees()!=null&&!department.getEmployees().isEmpty())
.flatMap(department->department.getEmployees().stream())
.collect(Collectors.toMap(Employee::getEmpId,Employee::getLegalStatement));

使用
flatMap
三元
运算符

Map<String,String> result = departments.stream()
 .flatMap(d->(Objects.nonNull(d.getEmployees()) && !d.getEmployees().isEmpty()) ? d.getEmployees().stream() : Stream.empty())
 .collect(Collectors.toMap(Employee::getEmpId, Employee::getLegalStatement));
如果映射的键包含重复项(根据Object.equals(Object)),则值映射函数将应用于每个相等元素,并使用提供的合并函数合并结果


通过使用
flatMap
三元
运算符

Map<String,String> result = departments.stream()
 .flatMap(d->(Objects.nonNull(d.getEmployees()) && !d.getEmployees().isEmpty()) ? d.getEmployees().stream() : Stream.empty())
 .collect(Collectors.toMap(Employee::getEmpId, Employee::getLegalStatement));
如果映射的键包含重复项(根据Object.equals(Object)),则值映射函数将应用于每个相等元素,并使用提供的合并函数合并结果


如果可能有多次出现的
empld
s,您可以在
collect
中编写一个
merge函数
,以决定首选项。如果可能有多次出现的
empld
s,您可以在
collect
中编写一个
merge函数
,以决定采用何种首选项。
Map<String,String> result = departments.stream()
 .flatMap(d->(Objects.nonNull(d.getEmployees()) && !d.getEmployees().isEmpty()) ? d.getEmployees().stream() : Stream.empty())
 .collect(Collectors.toMap(Employee::getEmpId, Employee::getLegalStatement));
public static <T,K,U> Collector<T,?,Map<K,U>> toMap(Function<? super T,? extends K> keyMapper,
                                                Function<? super T,? extends U> valueMapper,
                                                BinaryOperator<U> mergeFunction)