java8写一个共通方法:根据条件过滤StreamA,生成新的Stream输出。已知StreamA已经按照skip排好序了,要求全程以流的形式处理且符合以流的形式边读边写的思想,输出的Stream保持原来的顺序
时间: 2024-03-12 16:47:06 浏览: 18
可以使用Java 8中的Stream.filter()方法来过滤StreamA,然后使用Stream.flatMap()方法生成新的Stream输出。在过滤时,可以使用Java 8中的Predicate接口来定义条件。
以下是一个示例代码:
```java
public static <T> Stream<T> filterStream(Stream<T> streamA, Predicate<T> predicate) {
// 使用 flatMap 方法过滤并生成新的 Stream 输出
return streamA.flatMap(item -> {
if (predicate.test(item)) {
return Stream.of(item);
} else {
return Stream.empty();
}
});
}
```
在上述代码中,我们首先定义了一个名为filterStream的共通方法,它接受一个StreamA和Predicate作为参数。然后,我们使用Stream.flatMap()方法过滤StreamA,并将结果保存在一个新的Stream对象中。在flatMap方法中,我们使用Predicate.test()方法来判断当前元素是否符合条件。如果符合条件,我们使用Stream.of()方法将该元素包装为一个新的Stream对象;否则,我们使用Stream.empty()方法返回一个空的Stream对象。最后,flatMap方法会将所有的Stream对象合并成一个新的Stream对象,并保持原来的顺序。
使用示例:
```java
Stream<Integer> streamA = Stream.of(1, 2, 3, 4, 5);
Predicate<Integer> predicate = num -> num % 2 == 0;
Stream<Integer> filteredStream = filterStream(streamA, predicate);
filteredStream.forEach(num -> System.out.println(num));
```
在上述示例中,我们定义了一个Integer类型的StreamA和一个Predicate,该Predicate用于过滤出偶数。然后,我们调用filterStream方法并将StreamA和Predicate作为参数传递给它。最后,我们遍历过滤后的Stream并打印结果。