两个List对象集合比较

@Test
void compareData() {

    // 比较两个list对象集合 用stream()方式

    List<Dish> aaList = new ArrayList<>();
    Dish aaDish = new Dish();
    aaDish.setId(1);
    aaDish.setName("白菜");
    aaList.add(aaDish);
    aaDish = new Dish();
    aaDish.setId(2);
    aaDish.setName("青菜");
    aaList.add(aaDish);

    List<DishGetData> bbList = new ArrayList<>();
    DishGetData bbDish = new DishGetData();
    bbDish.setId("2");
    bbDish.setName("青菜");
    bbList.add(bbDish);
    bbDish = new DishGetData();
    bbDish.setId("3");
    bbDish.setName("波菜");
    bbList.add(bbDish);


    // 返回以aaList为主,两个集合中id和名称都相同的菜
    List<Dish> temp1 = aaList.stream().filter(a -> bbList.stream().anyMatch(b ->
        a.getId().toString().equals(b.getId()) &&a.getName().equals(b.getName())))
        .collect(Collectors.toList());

    temp1.forEach(item -> {
        System.out.println("相同的菜: " + item.getName());
        // 输出 相同的菜: 青菜
    });


    // 返回以aaList为主,两个集合中id和名称都相同以外所有的菜 
    // 名称和id相同的不返回,不相同的返回
    List<Dish> temp2 = aaList.stream().filter(a -> bbList.stream().noneMatch(b ->
        a.getId().toString().equals(b.getId()) && a.getName().equals(b.getName())))
        .collect(Collectors.toList());

    temp2.forEach(item -> {
        System.out.println("不同的菜: " + item.getName());
        // 输出 不同的菜: 白菜
    });



    // 返回以bbList为主,两个集合中id和名称都相同以外所有的菜 
    //名称和id相同的不返回,不相同的返回
    List<DishGetData> temp3 = bbList.stream().filter(a -> aaList.stream()
         .noneMatch(b -> a.getId().equals(b.getId().toString()) &&
         a.getName().equals(b.getName()))).collect(Collectors.toList());

    temp3.forEach(item -> {
        System.out.println("不同的菜: " + item.getName());
        // 输出 不同的菜: 波菜
    });
    
}
  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值