两个list通过stream流取差集
时间: 2023-08-10 13:02:10 浏览: 106
可以使用 Java 8 中的 Stream API 中的 `filter` 和 `collect` 方法来实现两个 List 的差集操作。
示例代码如下:
```java
List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(3, 4, 5, 6, 7);
List<Integer> diff = list1.stream()
.filter(e -> !list2.contains(e))
.collect(Collectors.toList());
System.out.println(diff); // 输出 [1, 2]
```
首先,我们将第一个 List 中的元素转换为 Stream,然后使用 `filter` 方法过滤掉第二个 List 中存在的元素,最后使用 `collect` 方法将结果转换为 List。
相关问题
java stream流 两个相同字段的list取差集
在Java中,你可以使用Stream流来获取两个具有相同字段的列表的差集。首先,将两个列表转换为流,然后使用filter操作符和anyMatch方法来过滤出在第一个列表中存在但在第二个列表中不存在的元素。下面是一个示例代码:
```java
import java.util.ArrayList;
import java.util.List;
class Main {
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
list1.add(5);
List<Integer> list2 = new ArrayList<>();
list2.add(4);
list2.add(5);
list2.add(6);
list2.add(7);
list2.add(8);
List<Integer> difference = list1.stream()
.filter(element -> !list2.contains(element))
.toList();
System.out.println(difference);
}
}
```
这段代码将输出 `[1, 2, 3]`,即两个列表的差集。请注意,这里使用了Java 8引入的toList()方法来将流转换为列表。如果你使用的是较早版本的Java,你可以使用collect(Collectors.toList())来实现相同的功能。同样地,如果你的列表中包含复杂的对象而不仅仅是整数,你可能需要使用适当的字段来进行过滤操作。
两个list取差集 java
以下是两个list取差集的Java代码示例:
```java
List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<>(Arrays.asList(3, 4, 5, 6, 7));
list1.removeAll(list2);
System.out.println(list1); // 输出:[1, 2]
```
上述代码中,我们首先创建了两个List,然后使用removeAll()方法从list1中移除了list2中包含的元素,最后输出了list1的结果,即差集。
另外,Java 8中也提供了stream()和filter()方法来实现两个List的差集:
```java
List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<>(Arrays.asList(3, 4, 5, 6, 7));
List<Integer> diff = list1.stream().filter(num -> !list2.contains(num)).collect(Collectors.toList());
System.out.println(diff); // 输出:[1, 2]
```
上述代码中,我们使用了Java 8中的stream()和filter()方法,将list1中不包含在list2中的元素筛选出来,最后使用collect()方法将结果转换为List并输出。
阅读全文