首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按一个属性按对象的另一个属性分组

按一个属性按对象的另一个属性分组
EN

Stack Overflow用户
提问于 2022-04-11 14:47:04
回答 1查看 71关注 0票数 0

有人能帮我吗。我有一个对象列表--在我的例子中,有啤酒厂。每个啤酒厂都有一些属性(字段),如名称、入口、id、省(所处的状态)等。一个啤酒厂(名字)可以设在许多省份。现在我需要解决这个问题:每个州的啤酒厂数量如何?所以,把名字按省份分组。所有数据正在从csv文件中读取。我已经创建了回传啤酒清单的阅读器。当我尝试这个:

代码语言:javascript
复制
Map<String, List<Breweries>> hashMap = new HashMap<>();
    hashMap = list.stream().collect(Collectors.groupingBy(Breweries::getProvince));
    for (Map.Entry<String, List<BreweriesPOJO>> stringListEntry : hashMap.entrySet()) {
        System.out.println(stringListEntry.getKey());
    }

这将返回me键(省)和整个对象作为值。

我已经坐了几个小时了。我没有主意了。

EN

回答 1

Stack Overflow用户

发布于 2022-04-11 15:00:36

您的示例是不正确的,您有一个HashMap<String, List<Breweries>>,但是您希望hashMap.entrySet()返回Set<Map.Entry<String, List<BreweriesPOJO>>。应该是Set<Map.Entry<String, List<Breweries>>。当您执行Map.Entry#getKey时,它将返回密钥--在您的情况下-- StringBreweries::getProvince返回。如果需要当前条目的Breweries列表,请使用Map.Entry#getValue

代码语言:javascript
复制
Map<String, List<Breweries>> hashMap = list.stream().collect(Collectors.groupingBy(Breweries::getProvince));
for (Map.Entry<String, List<Breweries>> stringListEntry : hashMap.entrySet()) {
    List<Breweries> breweries = stringListEntry.getValue();
}

但是,如果你只想要每个省的啤酒厂数量,你可以直接这样做:

代码语言:javascript
复制
Map<String, Long> hashMap = list.stream().collect(Collectors.groupingBy(Breweries::getProvince, Collectors.counting()));
for (Map.Entry<String, Long> entry : hashMap.entrySet()){
    System.out.println(entry.getKey() + ": " + entry.getValue() + " Breweries");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71829871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档