java8实现多个list对象用lambda求差集操作?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
业务场景:调用同步接口获取当前全部有效账户,数据库已存在部分账户信息,因此需要筛选同步接口中已存在本地的帐户。
调用接口获取的数据集合
List<AccountVo> list = response.getData().getItems();
本地查询出来的账户集合
List<Account> towList = accountRepository.findAll();
筛选差集代码
List<AccountVo> distinctByUniqueList = list.stream()
.filter(item -> !towList.stream() .map(e -> e.getOwnerId()) .collect(Collectors.toList()) .contains(item.getOwnerId())) .collect(Collectors.toList());
就这样获取到需要处理的数据。
补充知识:Java8中用Lambda表达式合并多个相同属性的对象集合
在实际的业务处理中,我们经常会碰到需要合并同一个集合内相同属性对象的情况,比如,同一个用户短时间内下的订单,我们需要将各个订单的金额合并成一个总金额。
那么用lambda表达式和HashMao怎么分别处理该种情况呢?本文以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相加,并得到一个新的对象。
通过比较不难看出,lambda表达式代码量更少,更易阅读,有兴趣的可以继续研究研究java8的一些其他特性。
关于java8实现多个list对象用lambda求差集操作问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。