java - Java 8 Stream 将列表转换为映射,其中映射键是从列表的两个字段派生的对象?
问题描述
class Person{
private String first;
private String last;
private BigDecimal gpa;
private int age;
}
class PersonKey{
private String first;
private String last;
}
现在我已经List<Person>
并且想要将其转换为Map<PersonKey, Person>
where PersonKey
is just the unique key value of a person。如何使用 Java 流实现这一点?
解决方案
我相信这就是您正在寻找的(假设没有两个人有相同的名字)。密钥是使用来自 Person 的 getter 和来自 PersonKey 的构造函数即时构造的。
Map<PersonKey, Person> map = list.stream()
.collect(Collectors.toMap(
person->new PersonKey(person.getFirst(),person.getLast()),
person->person));
为了容纳同名的人,你可以把他们放在一个Map<PersonKey,List<Person>>
Map<PersonKey, List<Person>> map = list.stream()
.collect(Collectors.groupingBy(person->new
PersonKey(person.getFirst(),
person.getLast())));
推荐阅读
- amazon-web-services - 如何使用 terraform 模板文件为 ec2 user_data 设置环境变量
- xcode - 如何在 Swift 5 中为基于单元格的 NSTableVew 中的单个行着色
- python - discord.py channel.history 从工作频道和时间返回 []
- python - 存储我的网络应用程序用户上传的 csv 数据,然后执行熊猫分析并使用烧瓶显示它们的最佳方法是什么?
- postgresql - 根据关系在数据库中插入数据
- angular - Angular 11 在页面加载时按值在 html 表中进行下拉选择失败
- mariadb - mariadb/mysql:如何将 BLOB 的/UNPACK 部分转换为整数或双精度等
- javascript - 如何获取 datalist 选项的值并将其分配给另一个元素?
- django - 将可点击的链接添加到管理页面 List_view
- javascript - Javascript如何使用includes()验证字符串是否包含'\'