Java中如何合并两个Map

培训教学 潘老师 7个月前 (10-11) 285 ℃ (0) 扫码查看

学习如何合并两个HashMap,可以选择忽略重复的键(覆盖值)或处理重复的键。

1.合并两个HashMap并忽略重复键

这是一个简单的解决方案。使用firstMap.putAll(secondMap)方法,将secondMap中的所有映射复制到firstMap中。

由于我们知道HashMap不允许重复的键,所以当我们以这种方式合并这些映射时,对于firstMap中的重复键,其值将被secondMap中相同键的值覆盖。

让我们来看一个例子。在下面的例子中,两个映射都有一个键为“4”的条目。合并后,我们在最终映射中来自第二个映射的条目。

//map 1
HashMap<Integer, String> firstMap = new HashMap<>();
firstMap.put(1, "A");
firstMap.put(2, "B");
firstMap.put(3, "C");
firstMap.put(4, "D");
//map 2
HashMap<Integer, String> secondMap = new HashMap<>();
secondMap.put(4, "F"); //合并时它将用F代替D
secondMap.put(5, "G"); //添加新的键值对
//合并map
firstMap.putAll(secondMap);
System.out.println(firstMap);// 输出:{1=A, 2=B, 3=C, 4=F, 5=G}

2.合并两个Map并组合重复键的值

如果我们想处理映射中存在重复键的情况,并且不想丢失任何映射和键的数据,那么我们可以利用Java 8中添加的Map.merge()函数。

merge()函数接受3个参数:键、值和用户提供的BiFunction,用于合并重复键的值。

在我们的示例中,我们想要将重复键“4”的值(来自两个映射)追加在一起。

//map 1
HashMap<Integer, String> firstMap = new HashMap<>();
firstMap.put(1, "A");
firstMap.put(2, "B");
firstMap.put(3, "C");
firstMap.put(4, "D");
//map 2
HashMap<Integer, String> secondMap = new HashMap<>();
secondMap.put(4, "F"); //合并时它将用F代替D
secondMap.put(5, "G"); //添加新的键值对
//合并map
secondMap.forEach((key, value) -> firstMap.merge(key, value, String::concat));
System.out.println(firstMap); // 输出:{1=A, 2=B, 3=C, 4=DF, 5=G}

注意键“4”的值。在第一个映射中它的值为D,在第二个映射中为F。在合并的映射中,它是一个组合值,如”DF”。

我们可以在提供的BiFunction中编写任何合并逻辑。例如,如果我们想要追加值并在值D和F之间放置一个分隔符,那么我们可以编写自己的BiFunction。

secondMap.forEach(
     (key, value) -> firstMap.merge(key, value, (v1, v2) -> v1.equalsIgnoreCase(v2) ? v1 : v1 + "-" + v2)
);

现在输出是一个连接的值,值D和F之间有一个分隔符:

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

版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/teach/9441.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】