什么是 Java 流中的“逃生舱口操作”?
2022-09-01 01:08:04
我正在阅读Java文档并遇到这句话:
除了转义舱口操作 和 之外,执行在调用终端操作时开始,在终端操作完成时结束。
iterator()
spliterator()
我不确定“逃生舱口操作”是什么意思。有人可以解释一下这个术语吗?
我正在阅读Java文档并遇到这句话:
除了转义舱口操作 和 之外,执行在调用终端操作时开始,在终端操作完成时结束。
iterator()
spliterator()
我不确定“逃生舱口操作”是什么意思。有人可以解释一下这个术语吗?
从包的 javadoc:stream
在几乎所有情况下,终端操作都是急切的,在返回之前完成对数据源的遍历和管道的处理。只有终端操作,不是;它们作为“转义舱口”提供,以便在现有操作不足以完成任务时启用任意客户端控制的管道遍历。
iterator()
spliterator()
这意味着在大多数情况下,当终端操作返回时,流遍历是完整的,但在 and 的情况下不是这样,通过使用这些终端操作之一 a 或 a 返回,但管道仍然是“打开的”,它将在通过迭代器请求元素时进行处理。这样,流处理就会变得懒惰,因为只有在请求下一个元素时才会执行流上的操作。iterator()
spliterator()
Iterator
Spliterator
Iterator<Person> iterator = persons
.stream()
.filter(p -> !p.getName().equals("Mike Tyson"))
.iterator();
调用方法后,流将“终止”:您无法链接更多方法。但是,您可以通过调用返回的迭代器的方法访问流的元素,并且仅在您第一次执行此操作时才开始处理流。仅当使用 或 终端操作时,这才是正确的。iterator()
next()
iterator()
spliterator()