有人能告诉我 Stream
的中间操作和终端操作有什么区别吗?
Stream
操作组合成流水线来处理流。所有操作要么是中间操作,要么是终端操作……是什么意思?
原文由 Amol Raje 发布,翻译遵循 CC BY-SA 4.0 许可协议
有人能告诉我 Stream
的中间操作和终端操作有什么区别吗?
Stream
操作组合成流水线来处理流。所有操作要么是中间操作,要么是终端操作……是什么意思?
原文由 Amol Raje 发布,翻译遵循 CC BY-SA 4.0 许可协议
根据 javadoc :
map(MapperFn)
或 filter(Predicate)
count()
或 forEach(Consumer)
请注意,如果最后没有终端操作,将 不会 执行所有中间操作。所以模式将是:
stream()
.intemediateOperation1()
.intemediateOperation2()
...
.intemediateOperationN()
.terminalOperation();
原文由 Hoa Nguyen 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
Stream支持多种操作,这些操作分为
intermediate
和terminal
操作。这些操作之间的区别在于中间操作是惰性的,而终端操作不是。当您在流上调用中间操作时,该操作不会立即执行。它仅在对该流调用终端操作时执行。在某种程度上,中间操作会被记住,并在调用终端操作时立即调用。您可以链接多个中间操作,并且在您调用终端操作之前,它们都不会执行任何操作。那时,您之前调用的所有中间操作都将与终端操作一起调用。
所有中间操作都返回 Stream(可以链接),而终端操作则不会。中间操作是:
终端操作产生非流(无法链接)结果,例如原始值、集合或根本没有值。
终端操作是:
最后5个是短路端子操作。