合并地图,以便将公共密钥的值添加到结果地图中

时间:2019-07-23 07:57:14

标签: java hashmap

我知道如何使用Map.Entry <>解决此问题,但我想知道是否可以用更短的方法完成。

问题陈述: 如果我必须合并两个地图,并假设它们都具有相同的键,请说 k1 ,而值要不同,请说 v1和v2 。 现在,生成的映射应具有键值对,如下所示: << strong> k1,v1 + v2 >

如果有人可以提出一个较短的方法,这将是一个很大的帮助。

1 个答案:

答案 0 :(得分:2)

函数Map.merge()在这方面可以为您提供帮助。来自Oracle的文档:

  

如果指定的键尚未与某个值关联或与null关联,请将其与给定的非null值关联。否则,用给定的重映射函数的结果替换关联的值,如果结果为null,则将其删除。当组合一个键的多个映射值时,此方法可能有用。

https://docs.oracle.com/javase/8/docs/api/java/util/Map.htm

这将检查地图中是否存在值,如果有,则对其应用函数。

合并值的功能取决于您的特定用例。例如,如果两个映射的键都表示IP地址,并且值表示它们访问URL的次数,则添加它们可能很有意义。在这种情况下,结果代码将是

Map<String, Integer> map1, map2;  // populated and not null

map1.forEach((k, v) -> map2.merge(k, v, (v1, v2) -> v1 + v2));

为清楚起见,此代码:

  • 遍历map1中的每一对(使用map1.forEach()
  • 将功能(k, v) -> map2.merge(...);应用于每个项目。
  • map2.merge(k, v, (v1, v2) -> v1 + v2)将两个值(如果两个都存在)加在一起,如果只有一个,则选择一个确实存在的值。

结果存储在map2中。

相关问题