什么是 Java 流中的“逃生舱口操作”?

2022-09-01 01:08:04

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

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

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


答案 1

从包的 javadocstream

在几乎所有情况下,终端操作都是急切的,在返回之前完成对数据源的遍历和管道的处理。只有终端操作,不是;它们作为“转义舱口”提供,以便在现有操作不足以完成任务时启用任意客户端控制的管道遍历。iterator()spliterator()

这意味着在大多数情况下,当终端操作返回时,流遍历是完整的,但在 and 的情况下不是这样,通过使用这些终端操作之一 a 或 a 返回,但管道仍然是“打开的”,它将在通过迭代器请求元素时进行处理。这样,流处理就会变得懒惰,因为只有在请求下一个元素时才会执行流上的操作。iterator()spliterator()IteratorSpliterator

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

调用方法后,流将“终止”:您无法链接更多方法。但是,您可以通过调用返回的迭代器的方法访问流的元素,并且仅在您第一次执行此操作时才开始处理流。仅当使用 或 终端操作时,这才是正确的。iterator()next()iterator()spliterator()


答案 2

推荐