java - 为什么 takeWhile 是有状态的?

标签 java java-8 java-stream

Javadoc指出

This is a short-circuiting stateful intermediate operation.


有状态的定义来自 Javadoc :

Stateful operations, such as distinct and sorted, may incorporate state from previously seen elements when processing new elements. Stateful operations may need to process the entire input before producing a result. For example, one cannot produce any results from sorting a stream until one has seen all elements of the stream. As a result, under parallel computation, some pipelines containing stateful intermediate operations may require multiple passes on the data or may need to buffer significant data. Pipelines containing exclusively stateless intermediate operations can be processed in a single pass, whether sequential or parallel, with minimal data buffering.


怎么样default Stream<T> takeWhile​(Predicate<? super T> predicate) stateful?它不需要查看整个输入等...
几乎就像 filter但短路。

最佳答案

那么,takeWhile应该处理 Stream 的最长前缀满足给定的 Predicate .这意味着要想知道给定元素的 Stream应由 takeWhile 处理,您可能必须处理它之前的所有元素。
因此,您需要知道 Stream 的前面元素的处理状态。以便知道如何处理当前元素。
按顺序 Stream s 您不必保持状态,因为一旦到达与 Predicate 不匹配的第一个元素,你知道你已经完成了。
并行 Stream但是,这变得更加棘手。

关于java - 为什么 takeWhile 是有状态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65213944/

相关文章:

java - 如何为resteasy实现bson生产者/消费者

java - aapt.exe'' 以非零退出值 1 完成

java - utf-8 编码、java、mysql 和表单插入问题

java - 通过流按键排序的集合

java - 使用 java 8 流过滤和修改列表对象

java - 无法转换迭代器

java - 如何将两个集合项目与项目组成?

java - 为什么以可变对象为标识在并行流中调用reduce方法不会保留结果中的顺序?

java - 我可以在枚举内的值之间进行映射吗?

java - Stream 的 SKIP 方法能否使无限流变得有限?