【问题标题】:Merge two Maps of Maps in Java在 Java 中合并两个 Maps 的 Map
【发布时间】:2017-07-03 13:56:33
【问题描述】:

我有一个 HashMap 里面又有一个 HashMap,

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

对于同一个Long 值,我将有多个内部映射,如何确保值字段没有被替换而是合并(附加)?

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

例如

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.put(222l, map1);
map.put(222l, map2);

应该为键 '222' 提供 6 个内部映射条目,而不是 3 个。

【问题讨论】:

标签: java merge hashmap


【解决方案1】:

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

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}}

【讨论】:

  • 它似乎仍然只给了我 3 个值
猜你喜欢
  • 1970-01-01
  • 2014-05-27
  • 2019-09-17
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 2014-03-09
相关资源
最近更新 更多