Java8中hashmap的嵌套arraylist
我有以下物品- Company.javaJava8中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,
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)