java中如何根据两个集合中对象的某一种属性,得到两个集合的差集
时间: 2024-04-12 11:30:21 浏览: 147
在Java中,你可以通过使用`Stream`和`filter`函数来根据两个集合中对象的某一种属性来获取两个集合的差集。
假设有两个包含对象的集合`list1`和`list2`,你想要根据对象的某个属性来获取它们的差集。以下是一个示例:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> list1 = new ArrayList<>();
List<Person> list2 = new ArrayList<>();
// 假设Person类有一个名为id的属性
// 添加一些对象到list1
list1.add(new Person(1, "John"));
list1.add(new Person(2, "Alice"));
list1.add(new Person(3, "Bob"));
// 添加一些对象到list2
list2.add(new Person(2, "Alice"));
list2.add(new Person(4, "Mike"));
// 根据id属性获取两个集合的差集
List<Person> difference = list1.stream()
.filter(person -> !list2.stream().map(Person::getId).collect(Collectors.toList()).contains(person.getId()))
.collect(Collectors.toList());
System.out.println(difference);
}
}
class Person {
private int id;
private String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
```
上述示例中,我们通过使用`Stream`和`filter`函数来筛选出在`list1`中存在但在`list2`中不存在的对象。在`filter`函数中,我们使用了`!list2.stream().map(Person::getId).collect(Collectors.toList()).contains(person.getId())`来检查对象的id属性是否存在于`list2`中。
输出结果将是 `[Person{id=1, name='John'}, Person{id=3, name='Bob'}]`,表示集合`list1`中存在而`list2`中不存在的对象。
请注意,这仅是一种实现方式,具体实现可能会根据你的需求和数据结构而有所不同。
阅读全文