Java8多条件两个相同对象类型的集合取差集
要取两个相同对象类型的集合的差集,可以使用Java 8的Stream API来实现。首先,要确保这个对象类型已经正确地实现了equals()和hashCode()方法,以便在计算差集时正确比较对象的相等性。
以下是一个示例代码,演示如何使用Stream API来取两个集合的差集:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// 创建两个集合
List<Person> list1 = new ArrayList<>();
list1.add(new Person("Alice", 25));
list1.add(new Person("Bob", 30));
list1.add(new Person("Charlie", 35));
List<Person> list2 = new ArrayList<>();
list2.add(new Person("Alice", 25));
list2.add(new Person("David", 40));
// 使用Stream API计算差集
List<Person> difference = list1.stream()
.filter(person -> !list2.contains(person))
.toList();
// 输出差集
difference.forEach(System.out::println);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 省略getter和setter方法
// 重写equals()和hashCode()方法
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
// 重写toString()方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
在上面的代码中,我们首先创建了两个Person对象的集合list1和list2。然后,我们使用Stream API的filter()方法来筛选list1中不包含在list2中的元素,最后将结果收集到一个新的List中。
注意,为了正确比较两个Person对象的相等性,我们重写了Person类的equals()和hashCode()方法。此外,我们还重写了Person类的toString()方法,以便在输出差集时打印对象的信息。
运行上面的代码,将输出差集:
Person{name='Bob', age=30}
Person{name='Charlie', age=35}
这表示list1中的元素Bob和Charlie不在list2中
原文地址: https://www.cveoy.top/t/topic/ihMa 著作权归作者所有。请勿转载和采集!