两个list中实体某个属性值相同的实体和不同的实体

说明

有两个list,分别是newList 和 oldList,快速取出两个 newList 中某个属性值相同的实体和不同的实体

代码

import lombok.Data;
import lombok.ToString;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class Main {

    /**
     *
     * @param args
     */
    public static void main(String[] args) {
      List<Segment> newList =  new ArrayList<Segment>();
        Segment newO1 = new Segment();
        newO1.setCouponNum("1");
        newO1.setArrAirportCode("北京");
        newO1.setDepAirportCode("山西");
        newList.add(newO1);

        Segment newO12 = new Segment();
        newO12.setCouponNum("2");
        newO12.setArrAirportCode("北京2");
        newO12.setDepAirportCode("山西2");
        newList.add(newO12);

        Segment newO13 = new Segment();
        newO13.setCouponNum("3");
        newO13.setArrAirportCode("北京2");
        newO13.setDepAirportCode("山西2");
        newList.add(newO13);

        List<Segment> oldList =  new ArrayList<Segment>();
        Segment oldO1 = new Segment();
        oldO1.setCouponNum("1");
        oldO1.setArrAirportCode("北京");
        oldO1.setDepAirportCode("山西");
        oldList.add(newO1);

        Segment oldO12 = new Segment();
        oldO12.setCouponNum("2");
        oldO12.setArrAirportCode("北京2");
        oldO12.setDepAirportCode("山西2");
        oldList.add(oldO12);

        Segment oldO13 = new Segment();
        oldO13.setCouponNum("4");
        oldO13.setArrAirportCode("北京2");
        oldO13.setDepAirportCode("山西2");
        oldList.add(oldO13);

        //过滤出需要插入的数据,这里就是过滤多个不相同字段
        List<Segment> collectOne = newList.stream().filter(newSeg -> {
            for (Segment oldSeg : oldList) {
                if (newSeg.getCouponNum().equals(oldSeg.getCouponNum())) {
                    return false;
                }
            }
            return true;
        }).collect(Collectors.toList());
        //collect中就是需要插入的数据
        System.out.println("newList中 couponNum 不相同的数据 = " + collectOne);

        //过滤出需要插入的数据,这里就是过滤多个不相同字段
        List<Segment> collectTwo = newList.stream().filter(newSeg -> {
            for (Segment oldSeg : oldList) {
                if (Objects.equals(newSeg.getCouponNum(),oldSeg.getCouponNum())) {
                    return true;
                }
            }
            return false;
        }).collect(Collectors.toList());
        //collect中就是需要插入的数据
        System.out.println("newList中 couponNum 相同的数据 = " + collectTwo);
        
    }
}

@ToString
@Data
class Segment {
    /** Coupon号 */
    private String couponNum;
    /** 起飞机场编码 */
    private String depAirportCode;
    /** 降落机场编码 */
    private String arrAirportCode;
}

运行结果

newList中 couponNum 不相同的数据 = [
Segment(couponNum=3, depAirportCode=山西2, arrAirportCode=北京2)
]

newList中 couponNum 相同的数据 = [
Segment(couponNum=1, depAirportCode=山西, arrAirportCode=北京), 
Segment(couponNum=2, depAirportCode=山西2, arrAirportCode=北京2)
]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值