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

Meh*_*lik 42 java java-8 java-stream

我正在阅读Java文档并遇到这句话:

除了转义舱口的操作iterator()spliterator(),被调用的终端操作时开始执行,并且终端操作完成时结束.

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

DVa*_*rga 41

javadoc中的的stream包:

在几乎所有情况下,终端操作都很渴望,在返回之前完成数据源的遍历和管道的处理.只有终端操作iterator()spliterator() 不是; 这些是作为"逃生舱口"提供的,以便在现有操作不足以执行任务时启用任意客户端控制的管道遍历.

这意味着在大多数情况下,流穿越完成后,终端操作的回报,但不是在的情况下iterator()spliterator():通过使用这些终端操作的一个IteratorSpliterator返回,但管道仍然是"开放的",这将是处理,因为元素是通过迭代器请求的.这样,流处理变得懒惰,因为仅当请求下一个元素时才执行流上的操作.

Iterator<Person> iterator = persons
    .stream()
    .filter(p -> !p.getName().equals("Mike Tyson"))
    .iterator();
Run Code Online (Sandbox Code Playgroud)

iterator()调用该方法后,流将"终止":您无法链接更多方法.但是您可以通过调用next()返回的迭代器的方法来访问流的元素,并且只在第一次执行此操作时才开始处理流.只有在使用iterator()spliterator()终端操作时才会出现这种情况.