【发布时间】:2019-12-06 15:28:55
【问题描述】:
我想使用Streams 将Map<String,Map<String,Integer>> 转换为Map<String,Integer>。
这就是问题所在(以及为什么我似乎无法弄清楚):
我想通过相应地图的键值对我的整数值进行分组。所以,澄清一下:
我有这样的条目:
Entry 1: ["A",["a",1]]
Entry 2: ["B",["a",2]]
Entry 3: ["B",["b",5]]
Entry 4: ["A",["b",0]]
我想将该结构转换为以下内容:
Entry 1: ["a",3]
Entry 2: ["b",5]
我认为使用Collectors 类和summingInt 和groupingBy 等方法,您应该能够做到这一点。不过,我似乎无法找出解决此问题的正确方法。
需要注意的是,所有内部的Maps 都保证始终具有相同的键,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())));
});
但是求和部分怎么加呢?
【问题讨论】:
-
你不能有这4个条目,键是一样的,只有2个
-
@AndrewTobilko 我相信OP意味着键“A”的内部映射有两个条目,键“B”的内部映射也是如此
-
正确。内层映射相同,但它们是不同的映射,因为它们位于外层映射的不同条目中
标签: java java-8 hashmap java-stream collectors