小编Pro*_*3cy的帖子

使用流将Map <String,Map <String,Integer >>转换为Map <String,Integer>

我想将a转换Map<String,Map<String,Integer>>Map<String,Integer>using Stream

这是要注意的问题(以及为什么我似乎无法弄清楚):

我想将我的Integer-Values按相应Map的键-值进行分组。因此,澄清一下:

我有这样的条目:

Entry 1: ["A",["a",1]]

Entry 2: ["B",["a",2]]

Entry 3: ["B",["b",5]]

Entry 4: ["A",["b",0]]
Run Code Online (Sandbox Code Playgroud)

我想将该结构转换为以下内容:

Entry 1: ["a",3]

Entry 2: ["b",5]
Run Code Online (Sandbox Code Playgroud)

我认为,使用Collectors类似的类和方法summingIntgroupingBy您应该能够完成此任务。不过,我似乎无法找出解决此问题的正确方法。

应该注意Map的是,保证所有的内部s始终具有相同的键,其Integer-value 0或sth>0。(例如,“ A”和“ B”都将始终具有彼此相同的5个键)到目前为止,我已经尝试了很多。我知道,如果没有求和部分,我可以这样:

Map<String,Integer> map2= new HashMap<String,Integer>();
                map1.values().stream().forEach(map -> {
                    map2.putAll(map.entrySet().stream().collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue())));
                });
Run Code Online (Sandbox Code Playgroud)

但是如何添加求和部分呢?

java hashmap java-8 java-stream collectors

5
推荐指数
1
解决办法
79
查看次数

使用Java Streams对内部Maps进行分组

我有以下结构:

Map<String,Map<String,Map<String,Integer>>>
Run Code Online (Sandbox Code Playgroud)

现在,我想忽略“第一级地图”,并根据“第二级地图”的键来分组(并总结)“第三级地图”。要澄清一些示例条目:

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]]]]
Run Code Online (Sandbox Code Playgroud)

所需的输出:

Entry 1: ["A"[[a,1];[b,4];[c,1]]]
Entry 4: ["B"[[a,8];[b,0];[c,1]]]
Run Code Online (Sandbox Code Playgroud)

因此,为此,我首先根据我的2级密钥(“ A”,“ B”)对我的Entry-stream进行分组,如果没有其他操作,则最终得到如下结构:

Map<String,List<Entry<String,Map<String,Integer>>>>
Run Code Online (Sandbox Code Playgroud)

这就是我被困住的地方。我该如何Map<String,Integer>从我的条目列表中获取我的信息(对于每个外部地图,具体而言)?

我假设可以保证需要使用以下简单代码:

        initialMap.values().stream()
                            .flatMap(m -> m.entrySet().stream())
                            .collect(Collectors.groupingBy(Map.Entry::getKey));
Run Code Online (Sandbox Code Playgroud)

摘要:

如何变换Map<String,Map<String,Map<String,Integer>>>Map<String<Map<String,Integer>>不顾最外层Map,分组我最里面Maps按照我的第二个,图层- Keys和总结我Integer的-值key最里面的-值Map。此外,最外面的每个第二级Maps都有一个,因此每个都会有相同的第二级。在3 -级别- s时,可以无法在其他3-级别-发现Key-Value-PairMapKeysKeysetKeysMaps

java lambda java-8 java-stream collectors

5
推荐指数
0
解决办法
125
查看次数

标签 统计

collectors ×2

java ×2

java-8 ×2

java-stream ×2

hashmap ×1

lambda ×1