两个List<对象>,第一个list<对象>与第二个List<对象>比较根据第二个List<对象>的一个属性的值是否存在第一个对象中,将第一个List<对象>分成两部分

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        // 假设已经有两个 MyObject 的列表
        List<MyObject> list1 = ...; // 第一个 List
        List<MyObject> list2 = ...; // 第二个 List

        // 从第二个列表中提取所有的 property 值
        Set<String> propertySet = list2.stream()
                .map(MyObject::getProperty) // 提取 property 值
                .collect(Collectors.toSet()); // 转换为 Set 以便快速查找

        // 根据是否存在于第二个列表的 property 值,将第一个列表分成两部分
        Map<Boolean, List<MyObject>> partitionedMap = list1.stream()
                .collect(Collectors.partitioningBy(
                        obj -> propertySet.contains(obj.getProperty()) // 检查 property 是否在第二个列表中
                ));

        // 取出存在和不存在的两部分
        List<MyObject> existsInList2 = partitionedMap.get(true); // 存在于第二个列表的部分
        List<MyObject> notExistsInList2 = partitionedMap.get(false); // 不存在于第二个列表的部分

        // 输出结果
        System.out.println("存在于第二个列表的对象: " + existsInList2);
        System.out.println("不存在于第二个列表的对象: " + notExistsInList2);
    }
}

// 假设的 MyObject 类
class MyObject {
    private String property;
    
    public MyObject(String property) {
        this.property = property;
    }

    public String getProperty() {
        return property;
    }

    @Override
    public String toString() {
        return "MyObject{property='" + property + "'}";
    }
}

代码说明:

  1. propertySet:从第二个 List<MyObject> 中提取所有的 property 值,并转换为 Set 以提高查找效率。
  2. partitioningBy:根据 propertySet 中是否包含第一个列表中的 property 值,将第一个列表分成两部分。
  3. partitionedMaptrue 对应的部分是 property 存在于第二个列表中的对象,false 对应的部分是 property 不存在的对象。

这样,existsInList2notExistsInList2 就分别包含第一个列表中根据属性值在第二个列表中是否存在而分组的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值