是否可以转换List<Entry>
至 Map<Employee, Map<LocalDate, Entry>>
用一个 lambda 表达式?
public class Entry {
Employee employee;
LocalDate date;
}
到目前为止,我想出了这样的事情:
entries.stream().collect(Collectors.toMap(Collectors.groupingBy(Entry::getEmployee), Collectors.groupingBy(Entry::getDate), Function.identity()));
但这会产生编译错误:
no suitable method found for
toMap(java.util.stream.Collector<com.a.Entry,capture#1 of ?,java.util.Map<com.a.Employee,
java.util.List<com.a.Entry>>>,java.util.stream.Collector<com.a.Entry,capture#2 of ?,
java.util.Map<java.time.LocalDate,java.util.List<com.a.Entry>>>,
java.util.function.Function<java.lang.Object,java.lang.Object>)
谢谢
最佳答案
假设 Entry
有 getter 并且 Employee
覆盖了 hashCode()
和 equals()
:
Map<Employee, Map<LocalDate, Entry>> result = entries.stream()
.collect(Collectors.groupingBy(Entry::getEmployee,
Collectors.toMap(Entry::getDate, Function.identity())));
请注意,如果员工有重复的日期,这将引发异常。
关于Java8 lambda 将 List 转换为 Map of Maps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41708545/