i have following structure:
Map<String,Map<String,Map<String,Integer>>>
现在我想忽略第一级映射并根据第二级映射的键分组(并汇总)第三级映射。
为了澄清一些示例条目:
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”)对我的输入流进行分组,如果没有其他操作,最终得到以下结构:
Map<String,List<Entry<String,Map<String,Integer>>>>
我现在遇到的问题是如何从每个外部Map中获取我的条目列表Map<String,Integer>
(特别是对于每个外部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
,根据第二层Keys
对我的最内层Maps
进行分组,并通过最内层Map
的key
值求和Integer
-values。
此外,每个外部的Map
对于每个第二级别的Map
都有一个Key-Value-Pair
,因此每个都将具有相同的第二级别Keys
。在第3层的Keyset
中可能会有在其他第3层的Maps
中找不到的Keys
。
.reduce
。 - arnonuemEntry 1: ["1"["A"[a,1]]]
。你是否考虑过这些地图是SingletonMap(只有一个条目的地图)?我问你这个问题,因为否则你问题中的输入输出太简单了。例如,对于此输入期望的结果是什么:["1"["A"[a,1], "B"[a,1]]]
? - davidxxx