java两个list对象根据对象里面的一个属性取交集
时间: 2024-05-01 21:21:33 浏览: 109
可以使用Java 8的Stream API来实现这个功能。假设有两个List对象,分别为list1和list2,对象类为Object,其中都有属性id。
代码如下:
```java
List<Object> resultList = list1.stream()
.filter(list2.stream()
.map(Object::getId)
.collect(Collectors.toSet())::contains)
.collect(Collectors.toList());
```
上述代码中,首先将list2中的所有id属性值收集到一个Set集合中,然后使用filter()函数过滤list1中的元素,只保留id属性值在Set集合中出现过的元素,最后将结果收集到一个新的List集合中。实现了两个List对象根据对象里面的一个属性取交集的功能。
相关问题
java两个list对象取交集
你可以使用Java 8中的stream和filter来计算两个List的交集。具体实现如下:
```java
List<T> list1 = ...;
List<T> list2 = ...;
List<T> intersection = list1.stream()
.filter(list2::contains)
.collect(Collectors.toList());
```
这里的`T`是你要比较的对象类型。`list1.stream()`将第一个List转换为Stream对象,`filter(list2::contains)`过滤出在第二个List中也存在的元素,最后通过`collect(Collectors.toList())`将结果转换为List类型并返回。
用java查找两个list对象中根据某个属性的交集
假设我们有两个List对象,每个对象都包含一个Person类的实例,我们要找到这两个List中根据id属性的交集,可以使用Java 8的Stream API来实现。
首先,我们要定义Person类:
```
public 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;
}
}
```
然后,我们可以定义两个List对象:
```
List<Person> list1 = Arrays.asList(
new Person(1, "Alice"),
new Person(2, "Bob"),
new Person(3, "Charlie")
);
List<Person> list2 = Arrays.asList(
new Person(2, "Bob"),
new Person(4, "David"),
new Person(5, "Emily")
);
```
现在,我们可以使用Stream API来查找这两个List中根据id属性的交集:
```
List<Person> intersection = list1.stream()
.filter(p1 -> list2.stream()
.anyMatch(p2 -> p2.getId() == p1.getId()))
.collect(Collectors.toList());
```
这个代码片段使用了两个Stream对象,先遍历list1,然后对于每个Person对象,使用anyMatch方法在list2中查找是否存在相同的id属性的Person对象。如果存在,就将这个Person对象加入到结果集合中。最后,我们使用collect方法将结果转换为List对象。
现在,intersection集合中包含了这两个List中根据id属性的交集。
阅读全文