什么是Java流中的“escape-hatch操作”?

时间:2017-03-01 06:26:24

标签: java java-8 java-stream

我正在阅读Java文档并遇到this sentence

  

除了转义操作iterator()spliterator()之外,执行在调用终端操作时开始,并在终端操作完成时结束。

我不确定“逃生舱操作”是什么意思。有人可以解释一下这个词吗?

1 个答案:

答案 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()终端操作时才会出现这种情况。