gpt4 book ai didi

Java流按内部数组分组

转载 作者:行者123 更新时间:2023-11-30 06:43:45 25 4
gpt4 key购买 nike

我有以下类的对象列表:

class Response {
public String shortName;
public String[] types;
}

我想使用流对类型进行分组操作。例如如果我给出如下的响应列表[{"阿拉斯加", ["state", "admin level1"]}, {"New Jersey", ["state", "admin level2"]}]结果应该是这样的 map :

{"state":["Alaska", "New Jersey"], "admin level1": ["Alaska"], "admin level2": "New Jersey"}

最佳答案

map 将每个 Response 中的字符串数组转换为 SimpleEntry,将其展平并使用 groupingBy mapping 作为下游收集器。

Map<String, List<String>> resultSet = 
responses.stream()
.flatMap(e -> Arrays.stream(e.getTypes()).map(a -> new AbstractMap.SimpleEntry<>(a, e.getShortName())))
.collect(Collectors.groupingBy(AbstractMap.SimpleEntry::getKey,
Collectors.mapping(AbstractMap.SimpleEntry::getValue,
Collectors.toList())));

如果您希望结果按照帖子中显示的顺序显示,那么您需要将结果转储到 LinkedHashMap 中:

...
...
.collect(Collectors.groupingBy(AbstractMap.SimpleEntry::getKey,
LinkedHashMap::new, // a supplier providing a new empty map into which the results will be inserted
Collectors.mapping(AbstractMap.SimpleEntry::getValue, Collectors.toList())));

关于Java流按内部数组分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51660104/

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