Java 8 Stream:通过谓词限制
在潜在无限流的场景中,我们经常遇到需要限制流直到第一个流的情况。元素未通过特定谓词。 Java 9 引入了有用的 takeWhile 操作,可以毫不费力地启用此功能。
不幸的是,Java 8 缺少这样的操作。因此,我们必须探索替代方法来实现此行为。
在 Java 8 中实现 takeWhile
要在 Java 8 中实现 takeWhile,我们可以利用以下策略:
下面是示例实现:
import java.util.Iterator; import java.util.stream.Stream; public class StreamTakeWhile { public static <T> Stream<T> takeWhile(Stream<T> stream, java.util.function.Predicate<T> predicate) { Iterator<T> iterator = stream.iterator(); return Stream.generate(() -> { if (iterator.hasNext() && predicate.test(iterator.next())) { return iterator.next(); } return null; }); } public static void main(String[] args) { StreamTakeWhile.takeWhile(Stream.iterate(1, n -> n + 1), n -> n < 10) .forEach(System.out::println); } }
使用 Java 9 takeWhile
使用 Java 9,您可以直接使用 takeWhile 操作,如下所示:
IntStream .iterate(1, n -> n + 1) .takeWhile(n -> n < 10) .forEach(System.out::println);
以上是如何为流实现 Java 8 与 Java 9 的'takeWhile”等效的功能?的详细内容。更多信息请关注PHP中文网其他相关文章!