要根据多个属性取两个相同对象类型集合的差集,可以使用Java 8的流操作和lambda表达式来实现。

假设有两个相同对象类型的集合List<User>,其中User类有多个属性,如idnameage

首先,可以使用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()方法将差集结果收集为一个新的集合

Java8多条件两个相同对象类型的集合根据其中的多个属性取差集

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

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