如何使用流从对象列表中获取地图? [复制]

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));

【讨论】:

是的,我试过你的第一个版本,忘记第二次争论,决定去这里

以上是关于如何使用流从对象列表中获取地图? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在java 8中通过流从1个列表的1个列表中获取所有对象?

如何使用流从两个列表或数组乘法中查找元素对

Terraform - 如何将列表转换为地图(如何使用 terraform 获取 AMI 标签)

如何从可能是与给定 id 匹配的父级或子级之一的列表中获取对象

如何使用来自外部设备的 setVideoURI 流从 android videoview 获取帧?

如何正确使用 Google Maps API? [复制]