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 + "'}";
}
}
代码说明:
propertySet
:从第二个List<MyObject>
中提取所有的property
值,并转换为Set
以提高查找效率。partitioningBy
:根据propertySet
中是否包含第一个列表中的property
值,将第一个列表分成两部分。partitionedMap
:true
对应的部分是property
存在于第二个列表中的对象,false
对应的部分是property
不存在的对象。
这样,existsInList2
和 notExistsInList2
就分别包含第一个列表中根据属性值在第二个列表中是否存在而分组的对象。