java 8 stream 过滤两个不同对象 list交集
时间: 2023-08-02 09:10:48 浏览: 121
如果要过滤两个不同对象的List的交集,则需要先将它们的某个属性提取出来,再进行比较。
示例代码如下:
假设有两个类:Person和Student,它们都有一个属性name,我们要找出它们的name属性的交集:
```java
class Person {
private String name;
// 其他属性和方法
}
class Student {
private String name;
// 其他属性和方法
}
List<Person> personList = Arrays.asList(
new Person("Alice"),
new Person("Bob"),
new Person("Charlie"),
new Person("David"));
List<Student> studentList = Arrays.asList(
new Student("Bob"),
new Student("David"),
new Student("Edward"),
new Student("Frank"));
List<String> personNames = personList.stream()
.map(Person::getName)
.collect(Collectors.toList());
List<String> intersection = studentList.stream()
.map(Student::getName)
.filter(personNames::contains)
.collect(Collectors.toList());
System.out.println(intersection); // 输出 [Bob, David]
```
以上代码中,我们先使用map方法将Person和Student的name属性提取出来,分别转换成两个List,然后使用filter方法过滤出交集,最后将结果收集到一个新的List中。
需要注意的是,上述代码中的Person和Student类需要有一个公共的getName方法,用于获取它们的name属性。
阅读全文