如何使用流从对象列表中获取地图? [复制]
Posted
技术标签:
【中文标题】如何使用流从对象列表中获取地图? [复制]【英文标题】:How to get map from list of object using stream? [duplicate] 【发布时间】:2020-08-29 09:14:29 【问题描述】:我有班级国家:
class Country
private String code;
private String name;
我需要从国家列表到带有代码和名称的地图。 我试过了
Map<String, String> countryNames = countries.stream()
.collect(Collectors.groupingBy(Country::getCode, Country::getName));
但这是不对的。如何正确收集?
【问题讨论】:
countries.stream().collect(Collectors.toMap(Country::getCode, Country::getName));
你要使用Collectors.toMap
它不起作用 UPD:没关系,我的错误,谢谢
【参考方案1】:
我假设您希望 code
作为键,并将名称作为 value
。在这种情况下,您需要使用Collectors.mapping
作为Collectors.groupingBy
的下游收集器。像这样:
Map<String, List<String>> countryNames = countries.stream()
.collect(Collectors.groupingBy(Country::getCode,
Collectors.mapping(Country::getName, Collectors.toList())));
请注意,这会将值作为字符串列表返回,因为如果有多个国家/地区具有相同的代码,则名称将分组在一个列表中(按Collectors.toList()
)。
如果您知道每个代码在列表中只出现一次,您可以改用Collectors.toMap
。
Map<String, String> countryNames = countries.stream()
.collect(Collectors.toMap(Country::getCode, Country::getName));
【讨论】:
是的,我试过你的第一个版本,忘记第二次争论,决定去这里以上是关于如何使用流从对象列表中获取地图? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Terraform - 如何将列表转换为地图(如何使用 terraform 获取 AMI 标签)
如何从可能是与给定 id 匹配的父级或子级之一的列表中获取对象