java8两个list集合取差集
时间: 2023-11-24 09:08:50 浏览: 129
可以使用Java 8的stream和lambda表达式来实现两个List集合取差集。可以使用filter()方法来对其中一个集合进行过滤,在filter()方法中使用!contains()实现对另一个集合中不存在的元素的过滤,然后使用collect()方法将结果收集至List集合中。具体实现代码如下所示:
```
List<String> list1 = Arrays.asList("a", "b", "c", "d");
List<String> list2 = Arrays.asList("b", "d", "e", "f");
List<String> difference = list1.stream()
.filter(element -> !list2.contains(element))
.collect(Collectors.toList());
System.out.println(difference); // 输出 [a, c]
```
在上述代码中,list1和list2是两个需要进行差集操作的List集合,定义了两个包含字符串的List集合,然后使用stream()方法产生一个Stream对象,然后使用filter()方法将list1中不包含在list2中的元素过滤出来,最后使用collect()方法将过滤出来的元素收集至List集合中。
相关问题
java 两个list取差集 并集 差集
在 Java 中,可以通过集合框架中的 Set 接口来实现两个 List 的取差集、并集和交集操作。
对于两个 List 取并集,可以先将一个 List 加入到 Set 中,然后再将另一个 List 的元素加入到 Set 中。这样就可以去掉重复元素,得到两个 List 的并集。
对于两个 List 取交集,同样可以先将一个 List 加入到 Set 中,然后再遍历另一个 List,将其元素与 Set 中的元素比较,如果相同就将其加入到另一个 Set 中,最后得到的就是两个 List 的交集。
对于两个 List 取差集,可以先将一个 List 加入到 Set 中,然后再遍历另一个 List,将其元素从 Set 中移除,最后得到的就是两个 List 的差集。
下面是示例代码:
```
import java.util.*;
public class Test {
public static void main(String[] args) {
List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8);
// 求并集
Set<Integer> union = new HashSet<>(list1);
union.addAll(list2);
System.out.println("并集:" + union);
// 求交集
Set<Integer> intersection = new HashSet<>(list1);
intersection.retainAll(list2);
System.out.println("交集:" + intersection);
// 求差集
Set<Integer> difference = new HashSet<>(list1);
difference.removeAll(list2);
System.out.println("差集:" + difference);
}
}
```
java8两个List集合取交集、并集、差集、去重并集
Java 8 中可以使用 Stream API 来实现集合之间的交集、并集、差集、去重并集。
假设有两个 List 集合:list1 和 list2,分别包含一些元素,代码如下:
```java
List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8);
```
下面分别介绍如何实现集合之间的操作。
1. 取交集
取交集即获取两个集合中共同拥有的元素。可以使用 Stream API 的 `filter()` 方法和 `contains()` 方法实现。代码如下:
```java
List<Integer> intersection = list1.stream()
.filter(list2::contains)
.collect(Collectors.toList());
System.out.println("交集:" + intersection); // 输出 [4, 5]
```
2. 取并集
取并集即获取两个集合中所有的元素,但是去重。可以使用 Stream API 的 `distinct()` 方法和 `concat()` 方法实现。代码如下:
```java
List<Integer> union = Stream.concat(list1.stream(), list2.stream())
.distinct()
.collect(Collectors.toList());
System.out.println("并集:" + union); // 输出 [1, 2, 3, 4, 5, 6, 7, 8]
```
3. 取差集
取差集即获取两个集合中不同的元素。可以使用 Stream API 的 `filter()` 方法和 `!contains()` 方法实现。代码如下:
```java
List<Integer> diff1 = list1.stream()
.filter(e -> !list2.contains(e))
.collect(Collectors.toList());
System.out.println("差集1:" + diff1); // 输出 [1, 2, 3]
List<Integer> diff2 = list2.stream()
.filter(e -> !list1.contains(e))
.collect(Collectors.toList());
System.out.println("差集2:" + diff2); // 输出 [6, 7, 8]
```
4. 去重并集
去重并集即获取两个集合中所有的元素,并且去重。可以使用 Stream API 的 `distinct()` 方法和 `flatMap()` 方法实现。代码如下:
```java
List<Integer> distinctUnion = Stream.of(list1, list2)
.flatMap(List::stream)
.distinct()
.collect(Collectors.toList());
System.out.println("去重并集:" + distinctUnion); // 输出 [1, 2, 3, 4, 5, 6, 7, 8]
```
阅读全文