要取两个相同对象类型的集合的差集,可以使用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对象的集合list1list2。然后,我们使用Stream API的filter()方法来筛选list1中不包含在list2中的元素,最后将结果收集到一个新的List中。

注意,为了正确比较两个Person对象的相等性,我们重写了Person类的equals()hashCode()方法。此外,我们还重写了Person类的toString()方法,以便在输出差集时打印对象的信息。

运行上面的代码,将输出差集:

Person{name='Bob', age=30}
Person{name='Charlie', age=35}

这表示list1中的元素BobCharlie不在list2

Java8多条件两个相同对象类型的集合取差集

原文地址: https://www.cveoy.top/t/topic/ihMa 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录