java8两个list中发数据比较_Java8 Stream对两个 List 遍历匹配数据的优化处理操作

package com.stream;

import java.util.ArrayList;

import java.util.List;

import java.util.stream.Collectors;

/**

*

* @ClassName: TwoListCopare

* @Description: 两个List取交集\并集\差集>

**/

public class TwoListCopare {

public static void main(String[] args) {

UserDTO userOld1 =new UserDTO("1","aaa",22);

UserDTO userOld2 =new UserDTO("2","bbb",32);

UserDTO userOld3 =new UserDTO("3","ccc",11);

UserDTO userOld4 =new UserDTO("4","ddd",42);

UserDTO userOld5 =new UserDTO("5","bbb",22);

UserDTO userOld6 =new UserDTO("6","eee",24);

UserDTO userNew1 =new UserDTO("7","dada",22);//新增一个

UserDTO userNew2 =new UserDTO("2","bbb",32);//不变一个

UserDTO userNew3 =new UserDTO("3","kaka",33);//更新一个

UserDTO userNew4 =new UserDTO("8","dbdb",42);//新增一个

UserDTO userNew5 =new UserDTO("5","bbb",100);//更新一个

//当然,少了1,4,6

List mapAdd =new ArrayList<>();

List oldList =new ArrayList<>();

List newList =new ArrayList<>();

//添加老数据

oldList.add(userOld1);

oldList.add(userOld2);

oldList.add(userOld3);

oldList.add(userOld4);

oldList.add(userOld5);

oldList.add(userOld6);

//添加新数据

newList.add(userNew1);

newList.add(userNew2);

newList.add(userNew3);

newList.add(userNew4);

newList.add(userNew5);

//去交集,既获取id相同的交集,需要更新

//1.先提取出id和结果,用map形式

List oldIds =new ArrayList<>();

List newIds =new ArrayList<>();

oldList.stream().forEach(it->oldIds.add(it.getId()));

newList.stream().forEach(it->newIds.add(it.getId()));

//    oldIds.stream().forEach(System.out::println);

//    newIds.stream().forEach(System.out::println);

//取交集id

System.out.println("-----------------交集----------------------");

List collectUpdate = newIds.stream().filter(it -> oldIds.contains(it)).collect(Collectors.toList());

collectUpdate.stream().forEach(System.out::println);

//取对应交集的对象

System.out.println("------------------交集的对象---------------------");

List userUpdate = newList.stream().filter(it -> collectUpdate.contains(it.getId())).collect(Collectors.toList());

userUpdate.stream().forEach(System.out::println);

//取old的差集

System.out.println("-----------------old的差集----------------------");

List collectDelete = oldIds.stream().filter(it -> !newIds.contains(it)).collect(Collectors.toList());

collectDelete.stream().forEach((System.out::println));

//取对应old差集对象

System.out.println("-----------------old差集对象----------------------");

List userDelete = oldList.stream().filter(it -> collectDelete.contains(it.getId())).collect(Collectors.toList());

userDelete.stream().forEach(System.out::println);

//取new的差集

System.out.println("-----------------new的差集----------------------");

List collectAdd = newIds.stream().filter(it -> !oldIds.contains(it)).collect(Collectors.toList());

collectAdd.stream().forEach((System.out::println));

//取对应old差集对象

System.out.println("-------------------old差集对象--------------------");

List userAdd = newList.stream().filter(it -> collectAdd.contains(it.getId())).collect(Collectors.toList());

userAdd.stream().forEach(System.out::println);

//取并集

System.out.println("-------------------并集--------------------");

List allIds =new ArrayList<>();

//获取一个包含了oldIds和newIds的总结合,但是没有去重

allIds.addAll(oldIds);

allIds.addAll(newIds);

//去重,获取并集ids的新集合

List joinIds = allIds.stream().distinct().collect(Collectors.toList());

joinIds.stream().forEach(System.out::println);

}

}

package com.shijiayun.api.interfaces.controller.management;

public class UserDTO {

private String id;

private String name;

private Integer age;

public UserDTO(String id, String name, Integer age) {

this.id = id;

this.name = name;

this.age = age;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return "UserDTO{" +

"id='" + id + '\'' +

", name='" + name + '\'' +

", age=" + age +

'}';

}

}

717269-20201127115425051-1398645714.png

标签:Stream,stream,List,System,new,UserDTO,Java8,out

来源: https://www.cnblogs.com/xzcBY/p/14047155.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值