在Java中合并两个地图地图

时间:2017-02-15 03:46:29

标签: java merge hashmap

我有一个HashMap,而HashMap又有一个HashMap,

$(img).css({
    position: "absolute",
    left: ($(img).parent().width() - $(img).width()) / 2
});

我将为同一个Map<Long, Map<String, Double>> map = new HashMap<>(); 值设置多个内部地图,如何确保不替换值字段并将其合并(附加)?

这个问题与How to putAll on Java hashMap contents of one to another, but not replace existing keys and values?不同,因为它是关于字符串的地图,我被困在一张地图上

例如

Long

应该为键'222'而不是3提供6个内部地图条目。

1 个答案:

答案 0 :(得分:3)

如果您使用的是Java 8,而不是put,则可以调用merge方法:

map.merge(222L, map2, (m1, m2) -> {m1.putAll(m2);return m1;});

如果map已经具有与给定键对应的值,则将调用作为第三个参数传递的合并函数,该函数仅将新映射的内容添加到先前存在的映射。这是完整的代码:

Map<Long, Map<String, Double>> map = new HashMap<>();
Map<String, Double> map1 = new HashMap<>();
Map<String, Double> map2 = new HashMap<>();

map1.put("1key1", 1.0);
map1.put("1key2", 2.0);
map1.put("1key3", 3.0);

map2.put("2key1", 4.0);
map2.put("2key2", 5.0);
map2.put("2key3", 6.0);

map.merge(222L, map1, (m1, m2) -> {m1.putAll(m2);return m1;});
map.merge(222L, map2, (m1, m2) -> {m1.putAll(m2);return m1;});
System.out.println(map);

打印所有六个键:

{222={1key2=2.0, 1key3=3.0, 2key3=6.0, 2key1=4.0, 1key1=1.0, 2key2=5.0}}