java8将两个相同对象的集合通过共有的多个字段取差集
要将两个相同对象的集合通过共有的多个字段取差集,可以使用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对象的集合list1和list2。然后使用Stream API的filter方法和anyMatch方法来过滤出在list1中存在但在list2中不存在的元素,最后将这些元素收集到一个新的集合difference中。
输出结果:
Bob, 30
Charlie, 35
原文地址: http://www.cveoy.top/t/topic/i7p3 著作权归作者所有。请勿转载和采集!