stream流筛选两个list的重复项
时间: 2023-07-08 16:26:45 浏览: 111
可以使用Java 8的Stream API,先将两个列表合并,然后使用distinct()和filter()方法进行筛选。具体的代码如下:
```java
List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(3, 4, 5, 6, 7);
List<Integer> result = Stream.concat(list1.stream(), list2.stream())
.distinct()
.filter(i -> list1.contains(i) && list2.contains(i))
.collect(Collectors.toList());
System.out.println(result); // 输出 [3, 4, 5]
```
上面的代码将两个列表合并成一个,然后使用distinct()方法去重,最后使用filter()方法筛选出同时在两个列表中出现的元素。最后将筛选出的元素收集到一个新的列表中,并输出结果。
相关问题
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中。
stream流筛选两个list的补集
假设有两个列表 `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` 中的元素。
阅读全文