java - 地图列表按某个键分组并汇总
问题描述
我想列出一个按某个键分组和汇总的地图列表。
List<Tag> tagList = new ArrayList<>();
# Tag
HashMap<String, Object> tagMap = new HashMap<>();
## feeding data example
tagMap.put("category", "A");
tagMap.put("name", "Apple");
tagMap.put("price", 10);
tagList.add(tagMap)
tagList =
[
{
"category": "A",
"name": "apple",
"price": 10
},
{
"category": "B",
"name": "banana",
"price": 20
},
{
"category": "C",
"name": "candy",
"price": 30
},
{
"category": "A",
"name": "apple",
"price": 20
},
{
"category": "B",
"name": "banana",
"price": 10
},
{
"category": "C",
"name": "candy",
"price": 20
}
]
我已经分组tagList
了category
Map<String, List<Tag>> tagGrouped =
tagList.stream()
.collect(Collectors.groupingBy(tag -> tag.getCategory()));
这是示例
Map<String, List<Tag>> tagGrouped =
{
"A": [
{
"category": "A",
"name": "apple",
"price": 10
},
{
"category": "A",
"name": "apple",
"price": 20
},
{
"category": "A",
"name": "apple",
"price": 30
}
],
"B": [
{
"category": "B",
"name": "banana",
"price": 10
},
{
"category": "B",
"name": "banana",
"price": 20
}
],
"C": [
{
"category": "C",
"name": "candy",
"price": 10
},
{
"category": "C",
"name": "candy",
"price": 10
},
{
"category": "C",
"name": "candy",
"price": 20
}
]
}
这是我最终想要得到的示例输出
tagGroupedList =
[
{
"category": "A",
"name": "apple",
"price": 60
},
{
"category": "B",
"name": "banana",
"price": 30
},
{
"category": "C",
"name": "candy",
"price": 40
}
]
我在这一点上卡住了..
List<Tag> tagGroupedList =
tagGrouped.stream()
.collect(Collectors.groupingBy(Tag::getCategory))
.entrySet()
.stream()
.flatMap(e -> e.getValue().stream())
.collect(Collectors.summarizingInt(Tag::getPrice));
解决方案
最好阅读官方文档,刷新自己的地图知识。 https://docs.oracle.com/javase/tutorial/collections/interfaces/map.html
推荐阅读
- amazon-web-services - ClientError:使用地面实况图像的 AWS object_detection_augmented_manifest_training 未指定训练通道
- mysql - 如何在没有通用“GROUP BY”元素的情况下组合来自 2 个查询的结果
- php - PHP 图像调整大小和展开占位符(透明)
- twitter-bootstrap - XPages 中的 bootstrapValidator
- android - 如何清理这些复杂的按钮?
- assembly - NASM 中的 FSTP 指令不会写入内存
- python - 如果我有完整的 url,如何使用函数 socket.gethostbyname 获取 IP 地址?
- java - 如何编写 REST API 并向使用现有 Web 应用程序的 REST API 的 android 用户提供身份验证?
- java - 如何在嵌套的 for 循环完成后运行 if 语句?
- three.js - Three.js DecalGeometry 不是构造函数