如何将所有在Java hashMap上的内容放在一个到另一个,而不替换现有的键和值?

2022-08-31 11:31:25

我需要将所有键和值从一个A HashMap复制到另一个B上,但不是为了替换现有的键和值。

最好的方法是什么?

我在想,而是迭代keySet并检查它是否存在,我会

Map temp = new HashMap(); // generic later
temp.putAll(Amap);
A.clear();
A.putAll(Bmap);
A.putAll(temp);

答案 1

看起来你愿意创建一个临时的,所以我会这样做:Map

Map tmp = new HashMap(patch);
tmp.keySet().removeAll(target.keySet());
target.putAll(tmp);

此处,是要添加到地图的地图。patchtarget

感谢Louis Wasserman,这里有一个利用Java 8中新方法的版本:

patch.forEach(target::putIfAbsent);

答案 2

使用GuavaMaps类的实用程序方法来计算2个地图的差异,您可以在一行中完成,使用方法签名可以更清楚地说明您要完成的任务:

public static void main(final String[] args) {
    // Create some maps
    final Map<Integer, String> map1 = new HashMap<Integer, String>();
    map1.put(1, "Hello");
    map1.put(2, "There");
    final Map<Integer, String> map2 = new HashMap<Integer, String>();
    map2.put(2, "There");
    map2.put(3, "is");
    map2.put(4, "a");
    map2.put(5, "bird");

    // Add everything in map1 not in map2 to map2
    map2.putAll(Maps.difference(map1, map2).entriesOnlyOnLeft());
}