我正在阅读Java文档并遇到this sentence:
除了转义操作
iterator()
和spliterator()
之外,执行在调用终端操作时开始,并在终端操作完成时结束。
我不确定“逃生舱操作”是什么意思。有人可以解释一下这个词吗?
答案 0 :(得分:41)
来自stream
包的javadoc:
在几乎所有情况下,终端操作都非常渴望,完成了他们的工作 遍历数据源并处理之前的管道 返回。仅限终端操作
iterator()
和spliterator()
不是;这些是作为逃生舱口提供的#34;使任意 在存在的情况下客户端控制的管道遍历 操作不足以完成任务。
这意味着在大多数情况下,当终端操作返回时,流遍历已完成,但在iterator()
和spliterator()
的情况下则不行:通过使用其中一个终端操作{{1}或者返回Iterator
,但管道仍然是“打开”#34;并且它将在通过迭代器请求元素时进行处理。这样,流处理变得懒惰,因为只有在请求下一个元素时才会执行流上的操作。
Spliterator
调用Iterator<Person> iterator = persons
.stream()
.filter(p -> !p.getName().equals("Mike Tyson"))
.iterator();
方法后,流终止&#34;:您无法链接更多方法。但是您可以通过调用返回的迭代器的iterator()
方法来访问流的元素,并且只有在您第一次执行此操作时才开始处理流。只有在使用next()
或iterator()
终端操作时才会出现这种情况。