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求差集操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • java lambda循环_使用Java 8 Lambda简化嵌套循环操作

    java lambda循环 对于每个经常需要在Java 8(或更高版本)中使用多维数组的人来说,这只是一个快速技巧. 在这种情况下,您可能经常会以类似于以下代码的结尾: float[][] values = ... for (int i = 0; i < values.length; i++) { for (int k = 0; k < values[i].length; k++) { float value = values[i][k]; // do something with i, k

  • Java编程中使用lambda表达式的奇技淫巧

    为什么使用Lambda表达式 先看几个例子: 第一个例子,在一个独立的线程中执行某项任务,我们通常这么实现: class Worker implements Runnable { public void run() { for (int i = 0; i < 100; i++) doWork(); } ... } Worker w = new Worker(); new Thread(w).start(); 第二个例子,自定义字符串比较的方法(通过字符串长度),一般这么做: class Leng

  • java8 forEach结合Lambda表达式遍历 List操作

    我就废话不多说了,大家还是直接看代码吧~ @Test void testJava8ForeachMap() { Map<String, Integer> items = new HashMap<>(); items.put("A", 10); items.put("B", 20); items.put("C", 30); items.put("D", 40); items.put("E&quo

  • java8 多个list对象用lambda求差集操作

    业务场景:调用同步接口获取当前全部有效账户,数据库已存在部分账户信息,因此需要筛选同步接口中已存在本地的帐户. 调用接口获取的数据集合 List<AccountVo> list = response.getData().getItems(); 本地查询出来的账户集合 List<Account> towList = accountRepository.findAll(); 筛选差集代码 List<AccountVo> distinctByUniqueList = list

  • java8 集合求差集、并集、交集的实例

    前言 java8里最大亮点是lambda,让我们用习惯C# linq的语法,也能眼前一亮.但是比起C#的语法糖还是差的很远. 差集.并集.交集 @Test public void test1(){ List<Integer> list1=new ArrayList<>(); list1.add(1); list1.add(2); list1.add(3); List<Integer> list2=new ArrayList<>(); list2.add(3)

  • java8实现List中对象属性的去重方法

    java8的stream流能完美解对象集合去重问题. List<UserCar> list1 = new ArrayList(); UserCar userCar = new UserCar(); userCar.setId(1); userCar.setCarNo("AA"); list1.add(userCar); UserCar userCar1 = new UserCar(); userCar1.setId(2); userCar1.setCarNo("A

  • Spring实战之使用Expression接口进行表达式求值操作示例

    本文实例讲述了Spring使用Expression接口进行表达式求值操作.分享给大家供大家参考,具体如下: 一 Bean package org.crazyit.app.domain; import java.util.Date; public class Person { private Integer id; private String name; private Date birth; // 无参数的构造器 public Person() { } // 初始化全部成员变量的构造器 pub

  • Pandas自定义shift与DataFrame求差集的小技巧

    目录 Pandas的高级shift偏移 Datafream对象求差集 总结 大家好,我是小小明.今天分享两个小技巧: Pandas的高级shift偏移 有很多玩量化的朋友经常碰到类似这样的问题: 其中有位量化大佬居然在半年后的今天又问了我一遍怎么实现这样的效果,他居然忘了我之前给他写过实现.为了避免有人再碰到类似的问题,特别写下此文. 我们知道Pandas默认的API是不支持这样的操作的,这个只能自己想办法实现.下面我借助数值索引实现这样的功能,并封装起来. 最终我们封装的方法如下: impor

  • ASP中解决“对象关闭时,不允许操作。”的诡异问题……

    在ASP中进行数据库操作时 复制代码 代码如下: rs.Open strsql,conn,1,3 while not rs.eof //对象关闭时,不允许操作. 找了好久,最后在strsql中发现问题所在-- 原因是: 这个strsql = "exec ***",用的是存储过程,而这个***存储过程中的最后加了一句"print @sql",导致这个问题,注释掉就OK了--

  • asp sqlserver 执行存储过程返回记录集报对象关闭时不允许操作

    如果要得到返回值,需要用Command的方法. 首先说明,返回值有两种.一种是在存储过程中直接return一个值,就象C和VB的函数返回值那样:另一种是可以返回多个值,存储这些值的变量名称需要在调用参数中先行指定. 这个例子要处理多种参数,输入参数,输出参数,返回记录集以及一个直接返回值(够全了吧?) 存储过程如下: 复制代码 代码如下: use pubs GO -- 建立存储过程 create procedure sp_PubsTest -- 定义三个参数变量,注意第三个,特别标记是用于输出

  • Javascript 对象(object)合并操作实例分析

    本文实例讲述了Javascript 对象(object)合并操作.分享给大家供大家参考,具体如下: 对象的合并 需求:设有对象 o1 ,o2,需要得到对象 o3 var o1 = { a:'a' }, o2 = { b:'b' }; // 则 var o3 = { a:'a', b:'b' } 方法1:使用JQuery的extend方法 **方法定义**:jQuery.extend([deep], target, object1, [objectN]) > 用一个或多个其他对象来扩展一个对象,返

  • Python Dataframe 指定多列去重、求差集的方法

    1)去重 指定多列去重,这是在dataframe没有独一无二的字段作为PK(主键)时,需要指定多个字段一起作为该行的PK,在这种情况下对整体数据进行去重. Attention:主要用到了drop_duplicates方法,并设置参数subset为多个字段名构成的数组. 具体代码如下: >>>import pandas as pd >>>data={'state':[1,1,2,2,1,2,2],'pop':['a','b','c','d','b','c','d']} &

  • JS实现数组简单去重及数组根据对象中的元素去重操作示例

    本文实例讲述了JS实现数组简单去重及数组根据对象中的元素去重操作.分享给大家供大家参考,具体如下: js数组简单去重 var arr1 = [1, 2, 3, 4, 5, 6, 3, 4, 3]; function arrayUnique1(arr) { var result = [], hash = {}; for (var i = 0, elem; (elem = arr[i]) != null; i++) { if (!hash[elem]) { result.push(elem); ha

随机推荐