将多个HashMap的值部分添加到一个新的HashMap中



我有三个HashMap<String, Integer>,其中一些键可能存在于两个/三个映射中。

我正在寻找一个新的HashMap,它将把这三个值组合成一个新值,其中值部分将是所有值的简单求和(其中键相同(。

我用merge()方法,

Map<String, Integer> combine = new HashMap<>(map1);
map2.forEach((k, v) -> combine.merge(k, v, Integer::sum));
map3.forEach((k, v) -> combine.merge(k, v, Integer::sum));

想知道,如何使用Stream和/或Collection类

我想:

Map<String, Integer> combine = Stream.of(map1, map2, map3)
.map(Map::entrySet)
.flatMap(Set::stream)
.collect(toMap(Entry::getKey, Entry::getValue, Math::addExact));

这样做的优点是不修改任何贴图。如果map1恰好是一个不可修改的地图,那么您的方法将是一个问题。

一般来说,避免为了获得不需要的结果而进行修改,尤其是当这种副作用出乎意料时。

最新更新