說我有以下地圖:使用java 8流API轉換一個地圖到另一個地圖
Map<Member, List<Message>> messages = ... //constructed somehow
我想使用java 8流API,以便獲得一個:
SortedMap<Message, Member> latestMessages = ...
傳入SortedMap/TreeMap的比較器將基於消息sendDate字段。
此外,在發送的消息列表中,我將選擇將成爲排序映射關鍵字的最新消息。
我該如何做到這一點?
編輯1:
Comparator<Message> bySendDate = Comparator.comparing(Message::getSendDate);
SortedMap<Message, Member> latestMessages = third.entrySet().stream()
.collect(Collectors.toMap(e -> e.getValue().stream().max(bySendDate).get(), Map.Entry::getKey, (x, y) -> {
throw new AssertionError();
},() -> new TreeMap(bySendDate.thenComparing(Comparator.comparing(Message::getId)))));
我得到以下編譯錯誤:
The method collect(Collector<? super T,A,R>) in the type Stream<T> is not applicable for the arguments (Collector<Map.Entry<Member,List<Message>>,?,TreeMap>)
你確定你想要嗎?這意味着即使具有相同日期但發送者和接收者不同的消息存在,也只能有一個具有特定「sendDate」的'Message'。 – Holger 2015-03-02 16:41:54
是的。基本上我會收到一封給特定會員的最新消息。 – balteo 2015-03-02 16:44:07
我實際上正在實施一個消息框,比如what'sapp或環聊等等。 – balteo 2015-03-02 16:45:04