gpt4 book ai didi

java - 使用 Java 流对内部映射进行分组

转载 作者:搜寻专家 更新时间:2023-10-31 19:51:29 25 4
gpt4 key购买 nike

我有以下结构:

Map<String,Map<String,Map<String,Integer>>>

现在我想忽略一级 map ,根据二级 map 的键对三级 map 进行分组(并总结)。澄清一些示例条目:

Entry 1: ["1"["A"[[a,1];[b,2]];"B"[[a,3];[c,1]]]]
Entry 2: ["2"["A"[[b,2];[c,1]];"B"[[a,5];[b,0]]]]

期望的输出:

Entry 1: ["A"[[a,1];[b,4];[c,1]]]
Entry 4: ["B"[[a,8];[b,0];[c,1]]]

因此,为此,我首先根据我的二级键(“A”、“B”)对我的 Entry-stream 进行分组,如果不做任何其他操作,最终得到如下结构:

Map<String,List<Entry<String,Map<String,Integer>>>>

这就是我被困的地方。我怎样才能得到我的 Map<String,Integer>来 self 的条目列表(对于每个外部 map ,具体而言)?

我认为保证需要的简单代码:

        initialMap.values().stream()
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey));

总结:

如何转换 Map<String,Map<String,Map<String,Integer>>>Map<String<Map<String,Integer>> , 忽略最外面的 Map ,分组我的内心Maps根据我的第二层- Keys总结我的Integer -值 key -最内层的值 Map .另外最外面的Maps每个人都有一个 Key-Value-Pair对于每个二级- Map , 所以每个人都会有相同的 2nd-Level- Keys .在第三级- Keyset s 可以是 Keys在其他 3 级中找不到 - Maps

最佳答案

Map<String, Map<String, Integer>> result = 
initialMap
.values()
.stream()
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.groupingBy(e -> mapToFirstEntry(e.getValue()).getKey(),
Collectors.summingInt(e -> mapToFirstEntry(e.getValue()).getValue()))));

但它假定一个三级 Map<String, Integer>包含一个条目,并且有一种方法可以获取该条目:

public static Map.Entry<String, Integer> mapToFirstEntry(Map<String, Integer> map) {
return map.entrySet().iterator().next();
}

关于java - 使用 Java 流对内部映射进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57324979/

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