on it road .com

Java 8 中合并两个hashmap - 处理重复键

如果我们想处理映射中存在重复键的情况,并且我们不想丢失任何映射和任何键的数据。
在这种情况下,我们可以借助 Java 8 中添加的 HashMap.merge() 函数。

merge()函数 3 个参数。
键、值并使用用户提供的 BiFunction 来合并重复键的值。

在我们的示例中,我们希望在找到重复键时添加两个字符串,仅当该值与之前与 map1中的键关联的值不同时。

//map 1
HashMap<Integer, String> map1 = new HashMap<>();
map1.put(1, "A");
map1.put(2, "B");
map1.put(3, "C");
map1.put(5, "E");
//map 2
HashMap<Integer, String> map2 = new HashMap<>();
map2.put(1, "G");	 
map2.put(2, "B");
map2.put(3, "C");
map2.put(4, "D");	// 添加新键值对
//Merge maps
map2.forEach(
    (key, value) -> map1.merge( key, value, (v1, v2) -> v1.equalsIgnoreCase(v2) ? v1 : v1 + "," + v2)
);
System.out.println(map1);

输出:

{1=A,G, 2=B, 3=C, 4=D, 5=E}

注意键“1”的值。
它在 map1 中的值为 A,在 map2 中的值为 G
在合并Map中,它的组合值为 "A,G"

合并两个hashmap - 忽略重复键

只需使用 HashMap.putAll(HashMap) 方法将所有映射从第二个映射复制到第一个映射。

我们知道 hashmap 不允许重复键。
因此,当我们以这种方式合并映射时,对于 map1中的重复键,该值会被 map2中相同键的值覆盖。

//map 1
HashMap<Integer, String> map1 = new HashMap<>();
map1.put(1, "A");
map1.put(2, "B");
map1.put(3, "C");
map1.put(5, "E");
//map 2
HashMap<Integer, String> map2 = new HashMap<>();
map2.put(1, "G");	//It will replace the value 'A'
map2.put(2, "B");
map2.put(3, "C");
map2.put(4, "D");	//A new pair to be added
//Merge maps
map1.putAll(map2);
System.out.println(map1);

输出:

{1=G, 2=B, 3=C, 4=D, 5=E}
在 Java 中如何合并两个HashMap

我们将学习在两种情况下加入 hashmap 忽略重复键(覆盖值)或者使用 Java 8 处理重复键。

日期:2020-09-17 00:09:23 来源:oir作者:oir