查找两个list对象中根据某个属性的交集
时间: 2023-11-17 21:05:01 浏览: 29
可以使用列表推导式和set()函数来实现:
```python
list1 = [{'name': 'Alice', 'age': 20}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 30}]
list2 = [{'name': 'Bob', 'age': 25}, {'name': 'David', 'age': 35}, {'name': 'Charlie', 'age': 30}]
# 获取list1和list2中都出现过的人的名字
intersection = set([person['name'] for person in list1]) & set([person['name'] for person in list2])
# 输出结果
print(intersection) # {'Bob', 'Charlie'}
```
这个例子中,我们首先使用列表推导式从list1和list2中分别获取所有人的名字,然后使用set()函数将它们转换为集合,并使用&运算符求出交集。最后,我们得到了list1和list2中都出现过的人的名字。
相关问题
用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属性的交集。
用java查找两个list对象中根据某个string属性的交集
假设有两个List对象,分别是list1和list2,每个对象有一个字符串属性name,现在需要找出这两个list中name属性相同的交集。
可以使用Java 8的stream API来实现:
```java
List<String> intersection = list1.stream()
.map(obj -> obj.getName())
.filter(name -> list2.stream()
.map(obj -> obj.getName())
.anyMatch(name2 -> name2.equals(name)))
.collect(Collectors.toList());
```
代码解释:
1. 使用stream()方法将list1转换成一个流。
2. 使用map()方法将每个对象转换成它的name属性。
3. 使用filter()方法过滤掉list1中name属性不在list2中的元素。
4. 在filter()方法中使用anyMatch()方法来判断list2中是否存在与当前元素name属性相等的元素。
5. 最后使用collect()方法将过滤后的元素收集到一个List中。
注意:上面的代码仅仅是演示了如何使用stream API来实现交集查找,实际上这种方式不一定比传统的循环查找更高效。如果两个list的大小都很大,那么使用stream API会产生很多中间对象,可能会导致内存占用和性能问题。