作者:男孩介于边缘 | 来源:互联网 | 2023-05-19 13:32
我试图合并多个哈希图也总和相同键的值,ı想用玩具示例解释我的问题如下
HashMap m = new HashMap<>();
HashMap m2 = new HashMap<>();
m.put("apple", 2);
m.put("pear", 3);
m2.put("apple", 9);
m2.put("banana", 6);
我试过putall
m.putAll(M2);
输出如下{banana = 6,apple = 9,pear = 3}
但它的结果不适用于这个问题.我希望输出为
{banana = 6,apple = 11,pear = 3}
怎么能在java中得到这个结果?
1> prunge..:
如果您使用的是Java 8,则可以使用Map 的新合并方法.
m2.forEach((k, v) -> m.merge(k, v, (v1, v2) -> v1 + v2));
2> sprinter..:
这是Java 8流的一个非常好的用例.您可以连接条目流,然后在新地图中收集它们:
Map combinedMap = Stream.concat(m1.entrySet().stream(), m2.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.summingInt(Map.Entry::getValue)));
这个解决方案有很多好处,包括能够使它平行,扩展到你想要的任意数量的地图,并且能够在需要时轻松过滤地图.它也不要求原始地图是可变的.