什么是Javastream中的“逃生 – 孵化操作”?
我正在阅读Java文档,遇到这样一句话 :
除了escape-hatch操作
iterator()
和spliterator()
,当调用terminal操作时开始执行,当terminal操作完成时结束。
我不确定什么是“逃生孵化”的意思。 有人能解释这个词吗?
从stream
包的javadoc :
在几乎所有的情况下, terminal操作都非常急切 ,在返回之前完成对数据源的处理和stream水线的处理。 只有terminal操作
iterator()
和spliterator()
不是; 如果现有的操作不足以完成任务,则可以将这些提供为“逃生舱口”,以便实现任意客户端控制的pipe线穿越。
这意味着在大多数情况下,当terminal操作返回时stream遍历完成,但是在iterator()
和spliterator()
的情况下,stream遍历完成:通过使用这些terminal操作之一返回Iterator
或Spliterator
,但是stream水线仍然“打开”,并且将通过迭代器请求元素来处理它。 这样, stream处理变得懒惰 ,因为只有在请求下一个元素时才会执行stream上的操作。
Iterator<Person> iterator = persons .stream() .filter(p -> !p.getName().equals("Mike Tyson")) .iterator();
在调用iterator()
方法之后,stream被“终止”:你不能链接更多的方法。 但是您可以通过调用返回的迭代器的next()
方法来访问stream的元素,并且仅在您第一次执行此操作时才会开始处理stream。 只有在使用iterator()
或spliterator()
terminal操作时才是如此。