假设我有以下地图:
Map<Member, List<Message>> messages = ... //constructed somehow
我希望使用Java 8 Stream 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>)