【问题标题】: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:没关系,我的错误,谢谢

标签: java java-stream


【解决方案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));

【讨论】:

  • 是的,我试过你的第一个版本,忘记第二次争论,决定去这里
猜你喜欢
  • 1970-01-01
  • 2014-08-07
  • 2020-07-10
  • 2020-03-21
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 2020-11-23
  • 2020-05-07
相关资源
最近更新 更多