Java 8 Stream API toMap converting to TreeMap(Java 8 Stream API toMap 转换为 TreeMap)
问题描述
public class Message {
private int id;
private User sender;
private User receiver;
private String text;
private Date senddate;
..
}
我有
List<Message> list= new ArrayList<>();
我需要将它们转换为
TreeMap<User,List<Message>> map
我知道如何使用 HashMap 进行转换
I know how to do transform to HashMap using
list.stream().collect(Collectors.groupingBy(Message::getSender));
但我需要 TreeMap :密钥 - 最新消息发送日期优先的用户值 - 按发送日期最新排序的列表
But I need TreeMap with: Key - User with newest message senddate first Value - List sorted by senddate newest first
用户类的一部分
public class User{
...
private List<Message> sendMessages;
...
public List<Message> getSendMessages() {
return sendMessages;
}
}
用户比较器:
public class Usercomparator implements Comparator<User> {
@Override
public int compare(User o1, User o2) {
return o2.getSendMessages().stream()
.map(message -> message.getSenddate())
.max(Date::compareTo).get()
.compareTo(o1.getSendMessages().stream()
.map(message1 -> message1.getSenddate())
.max(Date::compareTo).get());
}
}
推荐答案
可以使用重载的groupingBy
方法并将 TreeMap
作为 供应商
:
You can use overloaded groupingBy
method and pass TreeMap
as Supplier
:
TreeMap<User, List<Message>> map = list
.stream()
.collect(Collectors.groupingBy(Message::getSender,
() -> new TreeMap<>(new Usercomparator()), toList()));
这篇关于Java 8 Stream API toMap 转换为 TreeMap的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Java 8 Stream API toMap 转换为 TreeMap
基础教程推荐
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01