gpt4 book ai didi

Java 8 映射按键分组的映射列表

转载 作者:行者123 更新时间:2023-12-02 01:34:21 24 4
gpt4 key购买 nike

我有以下内容:List<Map<String, Object>> 。我想获得Map<String, List<Object>使用流。该映射的键将是它在列表中重复的键。基本上,是一对多,这将是数据的示例:

[
{ id: "a", name: "AAA"}
{ id: "a", name: "BBB"}
{ id: "b", name: "XXX"}
{ id: "b", name: "YYY"}
]

我想获得:

{
a: ["AAA", "BBB"],
b: ["XXX", "YYY"]
}

因此,这个新 map 是按前一个列表中的 ID 进行分组的。

最佳答案

Collectors.groupingByCollectors.mapping一起使用:

Map<String, List<Object>> result = listOfMaps.stream()
.collect(Collectors.groupingBy(map -> map.get("id").toString(),
Collectors.mapping(map -> map.get("name"),
Collectors.toList())));

Collectors.groupingBy 创建您想要的映射,而 Collectors.mapping 通过将映射函数应用于流的每个元素,将一个收集器调整为另一个收集器。 (在本例中,它通过首先将流的每个映射转换为映射到 "name" 键的值来收集到一个列表)。

如果需要,可以修改上面的代码以跳过没有带有“id”键的条目的 map :

Map<String, List<Object>> result = listOfMaps.stream()
.filter(map -> map.get("id") != null))
.collect(Collectors.groupingBy(map -> map.get("id").toString(),
Collectors.mapping(map -> map.get("name"),
Collectors.toList())));

关于Java 8 映射按键分组的映射列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55459122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com