java - 如何轻松地求和两个 hashMap<String,Integer>?

标签 java hashmap hashtable

我有两个 HashMap<String,Integer>

我怎样才能轻松地总结它们?

意味着对于字符串“a”,键将是(来自 Map1 的值 + 来自 Map2 的值)的总和?

我可以迭代 Map2 的每个项目并手动添加到 Map1。

但认为可能有更简单的方法?

我更喜欢将整数求和到其中一张 map 中。不创建新的

最佳答案

从 Java 8 开始 Map包含 merge 需要的方法

  • key ,
  • 新值(value),
  • 以及用于决定将什么值放入 map 的函数如果它已经包含我们的键(将根据旧值和新值做出决定)。

所以你可以简单地使用:

map2.forEach((k, v) -> map1.merge(k, v, Integer::sum));

现在您的 map1将包含来自 map2 的所有值如果键相同,旧值将添加到新值,结果将存储在映射中。

演示:

Map<String, Integer> m1 = new HashMap<>();
m1.put("a", 1);
m1.put("b", 2);
Map<String, Integer> m2 = new HashMap<>();
m2.put("a", 3);
m2.put("c", 10);

System.out.println(m1);
System.out.println(m2);

//iterate over second map and merge its elements into map 1 using 
//same key and sum of values
m2.forEach((k, v) -> m1.merge(k, v, Integer::sum));

System.out.println("===========");
System.out.println(m1);

输出:

{a=1, b=2}
{a=3, c=10}
===========
{a=4, b=2, c=10}

关于java - 如何轻松地求和两个 hashMap<String,Integer>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33640088/

相关文章:

java - 如何在 Java 中使用 String.format()

java - 正在检索cookie

java - 在哈希表中存储和检索类的实例

java - Guava map 中驱逐的懒惰

c - "array type has incomplete element type"是什么意思?

hash - Redis HMSET 文档 : What does it mean by 'hash' ?

java - 使用函数输入 Hibernate 参数

java - HL7 - 指定的患者位置

java - Person 不能转换为 HashMap<String, Person>

具有嵌套字符串或 ArrayList 的 Java HashMap