要将两个相同对象的集合通过共有的多个字段取差集,可以使用Java 8的Stream API进行操作。以下是一个示例代码:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

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));

        List<Person> difference = list1.stream()
                .filter(person -> !list2.stream()
                        .anyMatch(p -> p.getName().equals(person.getName()) && p.getAge() == person.getAge()))
                .collect(Collectors.toList());

        difference.forEach(person -> System.out.println(person.getName() + ", " + person.getAge()));
    }
}

在上面的示例中,我们首先创建了两个Person对象的集合list1list2。然后使用Stream API的filter方法和anyMatch方法来过滤出在list1中存在但在list2中不存在的元素,最后将这些元素收集到一个新的集合difference中。

输出结果:

Bob, 30
Charlie, 35
java8将两个相同对象的集合通过共有的多个字段取差集

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

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