簡體   English   中英

Java8 lambda將List轉換為Maps的Map

[英]Java8 lambda convert List to Map of Maps

是否可以使用一個lambda表達式將List<Entry>轉換為Map<Employee, Map<LocalDate, Entry>>

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.Co‌​llector<com.a.Entry,‌​capture#2 of ?, 
java.util.Map<java.time.LocalDate,java.util.List<com.a.Ent‌ry>>>,
java.util.func‌​tion.Function<java.l‌​ang.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())));

請注意,如果員工有重復日期,這將拋出異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM