Hel*_*rld 3 java java-8 java-stream
该Javadoc中指出,
这是一个短路状态中间操作。
Javadoc中 stateful 的定义:
在处理新元素时,有状态的操作,例如distinct 和sorted,可能会合并以前看到的元素的状态。有状态操作可能需要在产生结果之前处理整个输入。例如,在看到流的所有元素之前,无法通过对流进行排序来产生任何结果。因此,在并行计算下,一些包含有状态中间操作的管道可能需要对数据进行多次传递或可能需要缓冲重要数据。包含完全无状态中间操作的管道可以在单程中处理,无论是顺序还是并行,数据缓冲最少。
如何是default Stream<T> takeWhile?(Predicate<? super T> predicate)有状态的?它不需要查看整个输入等...
这几乎就像是filter短路。
Era*_*ran 10
那么,takeWhile应该处理Stream满足给定的的最长前缀Predicate。这意味着为了知道 的给定元素Stream是否应该由 处理takeWhile,您可能必须处理它之前的所有元素。
因此,您需要知道之前元素的处理状态,Stream才能知道如何处理当前元素。
在顺序Streams 中,您不必保持状态,因为一旦到达与 不匹配的第一个元素Predicate,您就知道已完成。
Stream然而,在并行s 中,这变得更加棘手。
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |