java list Stream 有两个list对象,list中是对象,当两个对象的某些属性相等时,相减
时间: 2024-12-25 22:37:08 浏览: 5
在Java中,如果你想从一个`List`中通过Stream API减去另一个`List`,并且基于某个对象的属性相等来判断,可以创建一个自定义的比较器或者函数式接口(如`BinaryOperator`)。首先,你需要定义一个方法用于比较两个对象的属性是否相等,然后结合`Collectors.groupingBy()`和`Collectors.reducing()`。
例如,假设你有`Person`类,有一个名为`id`的属性,你可以这样做:
```java
import java.util.*;
import java.util.stream.*;
class Person {
String id;
// 其他属性...
}
List<Person> list1 = ...; // 第一个列表
List<Person> list2 = ...; // 第二个列表
Comparator<Person> personIdComparator = Comparator.comparing(Person::getId);
Map<String, List<Person>> groupedList1 = list1.stream()
.collect(Collectors.groupingBy(person -> person.getId(),
Collectors.toList()));
Map<String, List<Person>> groupedList2 = list2.stream()
.collect(Collectors.groupingBy(person -> person.getId(),
Collectors.toList()));
Map<String, List<Person>> differenceMap = groupedList1.entrySet().stream()
.filter(entry -> !groupedList2.containsKey(entry.getKey()))
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> entry.getValue()
));
differenceMap.values().forEach(System.out::println); // 输出第一个列表中第二列表中没有的Person
阅读全文