如何将List集合中相同属性的对象合并

本文探讨了如何使用lambda表达式和HashMap处理业务场景中,当遇到多个具有相同name和age的Student对象时,如何合并score属性。通过实例演示了两种方法:1) 使用lambda表达式的并行流操作;2) 利用HashMap的唯一键特性进行数据去重和累加。
摘要由CSDN通过智能技术生成

在实际的业务处理中,我们经常会碰到需要合并同一个集合内相同属性对象的情况,比如,同一个用户短时间内下的订单,我们需要将各个订单的金额合并成一个总金额。那么用lambda表达式和HashMap怎么分别处理该种情况呢?本文以Student的name,age,score为例,一个List集合中有多个Student对象,针对name和age相同属性值的Student对象,对score值相加并合并为一条,介绍两种不同的处理办法。
  1.用lambda表达式:首先,我们新建一个Student类
在这里插入图片描述
然后在Demo中新建一个List集合存放Student对象,并用lambda表达式进行处理,其中parallelStream是一个并行执行的流.它通过默认的ForkJoinPool,提高你的多线程任务的速度。从结果中我们可以看到,对name和age属性值相同的张三,score值已经相加,并合并为一条新的对象。
在这里插入图片描述

2.HashMap合并集合:为了更直观的展示,我们重新new了一个新的类,并重写了hashCode和equal方法。
在这里插入图片描述
思路就是利用HashMap的key不能相同,去除相同的key,得到一个新的value值。运行结果如下,相同name和age的student对象中score相加,并得到一个新的对象。
在这里插入图片描述
在这里插入图片描述
转载的我向各位道歉,因为我的失误,没想到src在CSDN不兼容,导致图片没显示,给各位带来的不便我向各位道歉.

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java对于两个对象集合按照指定属性进行比较并取出不同的元素,可以使用以下的方式: 1. 定义两个集合对象,分别存储两个对象集合。 2. 定义一个空的List集合,用于存储比较后不同的元素。 3. 遍历第一个集合对象的每一个元素,然后通过指定属性的getter方法,获取指定属性的值。 4. 判断第二个集合对象是否存在与第一个元素相同的指定属性的值。如果不存在,则将该元素添加到List集合,表示该元素是第一个集合独有的元素。 5. 反之,则不做任何处理。 6. 遍历第二个集合对象的每一个元素,按照步骤3-5的方式进行比较,获取第二个集合独有的元素。 7. 最后将两个集合独有的元素合并成一个集合,就得到了按照指定属性比较的两个对象集合不同的元素。 示例代码如下: ``` List<Object> list1 = ... // 第一个对象集合 List<Object> list2 = ... // 第二个对象集合 List<Object> diffList = new ArrayList<>(); // 存储不同元素的List集合 for (Object obj1 : list1) { String attr = obj1.getAttr(); // 获取指定属性 boolean exists = false; for (Object obj2 : list2) { if (attr.equals(obj2.getAttr())) { // 判断第二个集合是否存在相同属性值 exists = true; break; } } if (!exists) { // 如果不存在,则添加到List集合 diffList.add(obj1); } } for (Object obj2 : list2) { // 重复上面的操作,获取第二个集合独有的元素 String attr = obj2.getAttr(); boolean exists = false; for (Object obj1 : list1) { if (attr.equals(obj1.getAttr())) { exists = true; break; } } if (!exists) { diffList.add(obj2); } } // 打印不同的元素集合 System.out.println(diffList); ``` 这样就可以比较按照指定属性两个对象集合,并得到不同的元素集合了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值