stream流筛选两个list的补集
时间: 2023-07-08 19:05:01 浏览: 83
假设有两个列表 `list1` 和 `list2`,我们要得到它们的补集。
可以使用 Python 中的 `filter()` 函数和 `lambda` 表达式来实现这个功能。具体步骤如下:
1. 定义一个函数 `is_not_in_list2()`,传入一个参数 `x`,如果 `x` 不在 `list2` 中则返回 `True`,否则返回 `False`。
```python
def is_not_in_list2(x):
return x not in list2
```
2. 使用 `filter()` 函数和 `lambda` 表达式来筛选出所有不在 `list2` 中的元素,并将其转换为列表。
```python
complement = list(filter(lambda x: is_not_in_list2(x), list1))
```
完整代码如下:
```python
def is_not_in_list2(x):
return x not in list2
complement = list(filter(lambda x: is_not_in_list2(x), list1))
```
这样,`complement` 列表中的元素就是 `list1` 中不在 `list2` 中的元素。
相关问题
Java stream流筛选两个list的补集
可以使用Java 8的Stream API来筛选两个List的补集。假设有两个List,分别为list1和list2,代码如下:
```java
List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(3, 4, 5, 6, 7);
List<Integer> difference = list1.stream()
.filter(e -> !list2.contains(e))
.collect(Collectors.toList());
System.out.println(difference);
```
运行结果为:
```
[1, 2]
```
上述代码中,我们通过Stream API的filter方法和contains方法来筛选出list1中不在list2中的元素,最后将结果收集到一个List中。
stream流筛选两个list的交集
可以使用Java 8中的Stream API来筛选两个List的交集,具体代码如下:
```java
List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(3, 4, 5, 6, 7);
List<Integer> intersection = list1.stream()
.filter(list2::contains)
.collect(Collectors.toList());
System.out.println(intersection); // 输出 [3, 4, 5]
```
首先将List转换为Stream,然后使用filter方法筛选出list2中包含的元素,最后通过collect方法将结果收集到一个新的List中。
阅读全文