java 合并两个Map

这篇具有很好参考价值的文章主要介绍了java 合并两个Map。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在开发中,有时需要将多个Map合并成一个Map,接下来就举例说明:

我的使用场景:以map2中已经存在的key的值为准

  • 把需要的字段从一个Map中一个个set到另一个Map中
Map<String, Object> map1 = new HashMap<>();
map1.put("A", 1);
map1.put("B", 2);
map1.put("C", 5);

Map map2 = new HashMap<>();
map2.put("C", 3);
map2.put("D", 4);

 // 合并两个Map
 map2.put("A", map1.get("A"));
 map2.put("B", map1.get("B"));
 map2.put("C", map1.get("C"));
 System.out.println(map2);

输出结果为:

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

这个结果不是我想要的!

  • putAll()方法
map2.putAll(map1);
System.out.println(map2);

输出结果为:

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

这个结果不是我想要的!

  • 通过java8的方式
map1.forEach((k, v) -> map2.merge(k, v, (v1, v2) -> v1));
System.out.println(map2);

输出结果为:

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

从结果看到时实现了,但是在实际业务使用过程中,会出现死循环的问题如下:

Handler dispatch failed; nested exception is java.lang.StackOverflowError

经过查找,StackOverflowError栈内存溢出

StackOverflowError 是一个java中常出现的错误:在jvm运行时的数据区域中有一个java虚拟机栈,当执行java方法时会进行压栈弹栈的操作。在栈中会保存局部变量,操作数栈,方法出口等等。jvm规定了栈的最大深度,当执行时栈的深度大于了规定的深度,就会抛出StackOverflowError错误。

简单来说就是递归死循环,踩坑。。。。。。。。

  • 自己写了个工具
public static <K, V> Map<K, V> mergeMaps(Map<K, V> map1, Map<K, V> map2) {
     Map<K, V> result = new HashMap<>(map1);
      for (Map.Entry<K, V> entry : map2.entrySet()) {
          K key = entry.getKey();
          V value = entry.getValue();
          if (value != null) {
              result.put(key, value);
          } else if (!result.containsKey(key)) {
              result.put(key, null);
          }
      }
      return result;
}

Map map = mergeMaps(map1,map2);
System.out.println(map);

输出结果为:

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

这次实现了我想要的结果,完美!文章来源地址https://www.toymoban.com/news/detail-674152.html

到了这里,关于java 合并两个Map的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 连接合并两个数组(Array)的五种方法

    T可以是基础类型,也是类类型

    2024年02月05日
    浏览(58)
  • 【Java】Java合并两个List后并去掉重复项的几种做法

    工作中很多时候需要用到合并两个List并去除其中的重复内容,这是一个很简单的操作,实现的方法也多种多样。 下面以具体实例展示给大家~ 可以很清楚的看出通过Stream完成的代码看上去更加简洁流畅 这样做后的list就是合并并去重后的结果

    2024年02月11日
    浏览(56)
  • Java合并两个List并去掉重复项的几种做法

    一、前言 工作中很多时候需要用到合并两个List并去除其中的重复内容,这是一个很简单的操作,实现的方法也多种多样,请继续往下看 二、使用stream方式进行去重(需要jdk1.8及以上) 可以很清楚的看出通过Stream完成的代码看上去更加简洁流畅  三、使用HashSet集合的方式进行去重

    2024年02月11日
    浏览(58)
  • # java合并两个list 并去重,指定保留其中一个list的重复数据

    在Java中,有多种方法可以合并两个List并去重,指定保留其中一个List的重复数据。下面介绍几种常见的方法,并附上代码示例。 该方法首先将一个List的所有元素加入到目标List中,然后遍历另一个List,如果目标List中不包含该元素,则将该元素加入到目标List中。最后得到的就

    2024年02月02日
    浏览(64)
  • Java中合并两个数组的4种方法(How to Merge Two Arrays in Java)

    int[] arr1={1, 2, 3, 4, 5, 6}; //first array int[] arr2={7, 8, 9, 0}; //second array int[] arr3={1, 2, 3, 4, 5, 6, 7, 8, 9, 0} //resultant array There are following ways to merge two arrays: 1.Java arraycopy() method 2.Without using arraycopy() method 3.Java Collections 4.Java Stream API Java arraycopy() is the method of System class which belongs to java.la

    2024年02月11日
    浏览(41)
  • jmap(Memory Map for Java)Java内存映像工具

    jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为 heapdump 或 dump文件 ) 如果不使用jmap命令,要想获取Java堆转储快照也还有一些比较“暴力”的手段: 譬如 -XX:+HeapDumpOnOutOfMemoryError 参数,可以让虚拟机在内存溢出异常出现之后自动生成堆转储快照文件, 通过 -XX:

    2024年02月12日
    浏览(51)
  • 数据分析Pandas专栏---第三章<Pandas合并list和字典>

    在处理数据时,经常会遇到需要操作和转换DataFrame的场景。特别是当涉及到从单个或多个字典合成DataFrame,以及合并多个DataFrame时,适当的方法和技巧可以极大地简化程序逻辑并提高代码的可读性与效率。此外,数据操作过程中,索引的正确管理是保持数据完整性的关键。本

    2024年02月21日
    浏览(47)
  • Java02-迭代器,数据结构,List,Set ,Map,Collections工具类

    目录 什么是遍历? 一、Collection集合的遍历方式 1.迭代器遍历 方法 流程 案例 2. foreach(增强for循环)遍历 案例 3.Lamdba表达式遍历 案例 二、数据结构 数据结构介绍 常见数据结构 栈(Stack) 队列(Queue) 链表(Link) 散列表(Hash Table) 树(Tree) List接口 ArraysList集合 Linked

    2024年02月14日
    浏览(50)
  • sql语句两个字段合并或者两个字段拼接显示

    mysql 使用 concat函数 小栗子: sql server 连接字段,直接使用 + 号,和java字符串拼接一样 小栗子: oracle 数据库 可以使用 || ,也可以使用 concat函数 小栗子: ACCESS数据库连接字段,使用 + 号,他与sql server 一样的 小栗子:

    2024年02月11日
    浏览(44)
  • GitHub如何合并两个分支

    在GitHub上合并两个分支通常涉及到使用git的合并(merge)或拉取请求(Pull Request, PR)功能。下面是两种常见方法的步骤: 方法一:使用Pull Request (推荐用于团队协作) 创建拉取请求 : 在GitHub仓库页面,点击“Pull requests”标签,然后点击“New pull request”按钮。 选择基础分支和

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包