xde*_*000 34 java java-8 java-stream
我正在阅读流抽象的java 8 API,但我不太理解这句话:
中间操作返回一个新流.他们总是懒惰; 执行诸如filter()之类的中间操作实际上并不执行任何过滤,而是创建一个新流,当遍历时,该流包含与给定谓词匹配的初始流的元素.在执行管道的终端操作之前,不会开始遍历管道源.
当过滤操作创建新流时,该流是否包含已过滤的元素?似乎理解流仅在遍历时才包含元素,即具有终端操作.但是,包含过滤流的内容是什么?我糊涂了!!!
ass*_*ias 53
这意味着过滤器仅在终端操作期间应用.想想这样的事情:
public Stream filter(Predicate p) {
this.filter = p; // just store it, don't apply it yet
return this; // in reality: return a new stream
}
public List collect() {
for (Object o : stream) {
if (filter.test(o)) list.add(o);
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
(这不编译,是对现实的简化,但原则是存在的)
Nis*_*til 14
流是惰性的,因为除非调用终端操作,否则不评估中间操作.
每个中间操作都会创建一个新流,存储提供的操作/功能并返回新流.
管道累积这些新创建的流.
调用终端操作的时间,流的遍历开始,并且逐个执行相关的功能.
并行流不会逐个评估流(在终端点).根据可用的核心,操作是同时执行的.
| 归档时间: |
|
| 查看次数: |
22932 次 |
| 最近记录: |