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}
我们将学习在两种情况下加入 hashmap 忽略重复键(覆盖值)或者使用 Java 8 处理重复键。
日期:2020-09-17 00:09:23 来源:oir作者:oir