java - 在分组时计算值中的元素按键中的属性
问题描述
我有一个Map<Owner, List<Car>>
as ownerMap
。我的Car
班级有getColor()
andgetPrice()
方法。我的
Owner
班级有 getCity() 方法。
我想按城市计算汽车的分组。(例如:布达佩斯:4(汽车))
到目前为止,这是我的代码:
List<String> cities = ownerMap.entrySet()
.stream()
.map(m -> m.getKey().getCity())
.distinct()
.collect(Collectors.toList());
解决方案
你应该看看Collectors.groupingBy
and Collectors.summingInt
。
例如,类似:
Map<String, Integer> cities=ownerMap.entrySet()
.stream()
.collect(Collectors.groupingBy(e -> e.getKey().getCity(), Collectors.summingInt(e -> e.getValue().size())));
cities.forEach((name, count) -> {
System.out.println(name + ":" + count);
});
从Collectors.groupingBy
文档中:
返回一个收集器,对类型 T 的输入元素执行级联“分组依据”操作,根据分类函数对元素进行分组,然后使用指定的下游收集器对与给定键关联的值执行归约操作。
在您的情况下,分类功能是按城市(entry.getKey().getCity()
),而您的归约操作是按键(entry.getValue().size()
)的 Cars 列表大小的总和。
已编辑修改以按城市获取汽车总和(列表大小)
推荐阅读
- sorting - 在 solr7.5 中,如何按 facet.pivot 的二级字段计数排序?
- python - TensorFlow 预测输出的类别
- mysql - Mysql:试图获取树的所有子节点
- bash - Echo 输出变量的内容 & 用双引号括起来附加 ^M (bash)
- reactjs - React 中重复元素的密钥管理
- c# - 如何在 GenericRepository 和 UnitOfWork 中使用 DependencyInjection
- r - 如何过滤除索引以外的列上的 xts 对象
- reactjs - AWS Amplify Auth -“withAuthenticator”的“记住我”功能
- postgresql - 对 generate_series 进行强制转换给出:错误:在不能接受集合的上下文中调用的集合值函数
- css - 如何仅将溢出 y 添加到特定 div