Java8多条件两个相同对象类型的集合根据其中的多个属性取差集
要根据多个属性取两个相同对象类型集合的差集,可以使用Java 8的流操作和lambda表达式来实现。
假设有两个相同对象类型的集合List<User>,其中User类有多个属性,如id、name和age。
首先,可以使用stream()方法将两个集合转换为流,然后使用filter()方法根据多个属性进行过滤,最后使用collect()方法将结果收集为一个新的集合。
以下是一个示例代码:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// 创建两个相同对象类型的集合
List<User> list1 = new ArrayList<>();
list1.add(new User(1, "John", 20));
list1.add(new User(2, "Mike", 25));
list1.add(new User(3, "Tom", 30));
List<User> list2 = new ArrayList<>();
list2.add(new User(2, "Mike", 25));
list2.add(new User(4, "Jack", 35));
// 根据多个属性取差集
List<User> diffList = list1.stream()
.filter(user -> list2.stream()
.noneMatch(user2 -> user.getId() == user2.getId()
&& user.getName().equals(user2.getName())
&& user.getAge() == user2.getAge()))
.collect(Collectors.toList());
// 输出差集结果
diffList.forEach(System.out::println);
}
static class User {
private int id;
private String name;
private int age;
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
}
运行以上代码,将输出差集结果:
User{id=1, name='John', age=20}
User{id=3, name='Tom', age=30}
上述代码中,使用了两个filter()方法进行过滤,外层的filter()方法用于过滤list1中的元素,内层的filter()方法用于判断是否存在相同的元素。如果不存在相同的元素,则返回true,表示当前元素是差集的一部分,否则返回false,表示当前元素不是差集的一部分。最后,使用collect()方法将差集结果收集为一个新的集合
原文地址: https://www.cveoy.top/t/topic/ihMc 著作权归作者所有。请勿转载和采集!