使用stream流对比2个集合,根据条件筛选符合条件的流在集合中
时间: 2023-08-26 13:56:21 浏览: 66
可以使用Stream流对比两个集合,并根据条件筛选符合条件的元素。下面是一个示例代码:
```java
List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8);
List<Integer> result = list1.stream()
.filter(list2::contains) // 根据条件筛选符合条件的元素
.collect(Collectors.toList());
System.out.println(result); // 输出 [4, 5]
```
在上述代码中,我们使用`list1.stream()`创建了一个流,然后使用`filter`方法来筛选符合条件的元素。在`filter`方法中,我们通过`list2::contains`来判断元素是否存在于`list2`中,如果存在,就会被保留下来。
最后,我们使用`collect(Collectors.toList())`将流中的元素收集到一个新的列表中,并打印结果。输出结果为`[4, 5]`,即符合条件的元素。
相关问题
stream流中筛选一个集合中的元素与另一集合不匹配的元素
在Java的Stream流中,你可以使用`filter`方法来筛选一个集合中与另一个集合不匹配的元素。具体步骤如下:
假设有两个集合:`List<T> list1` 和 `List<T> list2`,你想要筛选出在`list1`中存在但在`list2`中不存在的元素。
你可以使用`filter`方法结合`contains`方法来实现这个需求,具体代码如下:
```java
List<T> result = list1.stream()
.filter(element -> !list2.contains(element))
.collect(Collectors.toList());
```
上述代码中,`filter`方法的参数是一个Lambda表达式,用来判断元素是否满足条件。在这里,我们使用`!list2.contains(element)`来判断元素是否不在`list2`中,即筛选出不匹配的元素。
最后,通过`collect`方法将筛选后的元素收集到一个新的集合中(这里使用了`toList()`方法)。
请注意,这种方法的时间复杂度是O(n^2),因为对于`list1`中的每个元素,都需要遍历一次`list2`来判断是否匹配。如果集合比较大,性能可能会受到影响。如果需要更高效的解决方案,可以考虑使用HashSet或者使用Java 8引入的新特性Stream API的更高级操作。希望对你有所帮助!如果还有其他问题,请随时提问。
写一个用stream流筛选两个集合的并集Demo
以下是一个用stream流筛选两个集合的并集的Demo:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public 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);
List<Integer> list2 = new ArrayList<>();
list2.add(3);
list2.add(4);
list2.add(5);
list2.add(6);
List<Integer> union = list1.stream()
.filter(list2::contains)
.collect(Collectors.toList());
System.out.println(union);
}
}
```
这个Demo中,我们创建了两个List,然后使用stream流筛选出它们的并集。具体来说,我们使用了filter()方法和contains()方法,filter()方法用于筛选出list1中包含在list2中的元素,contains()方法用于判断list2中是否包含某个元素。最后,我们使用collect()方法将筛选出的元素收集到一个新的List中,并输出这个List。