繁体   English   中英

Java中流的延迟评估的优势

[英]Advantage of lazy evaluation of streams in java

我读过,流在管道中是惰性计算的。 除非在表达式上调用了终端操作,否则它不会执行。 但是,对表达式进行这种惰性计算的好处是什么? 有人可以举例说明吗

Java 中流管道的延迟评估与lambda无关。

仅当最后一个站要求更多数据时,才评估流管道中除最后一个站以外的所有站。 当最后一个站点从最后一个站点拉出一秒时,那个站点从它之前的那个站点拉出,依此类推,直到最后对新数据的需求一直到达供应商。 然后,供应商提供下一个值,该值通过管道传播回(实际上是向前传播)到最后一个阶段(收集器或forEach),并且循环重复进行。

这种方法不需要流水线实现来过度生产和/或缓冲任何东西。 这对于CPU和内存占用量非常有用,通常对于Java应用程序来说是一个很大的偏差。

例:

Stream
    .generate(new Random(42)::nextLong) // <-- supplies the next random number every time the next station pulls it
    .limit(5) // <-- pulls from the generator when is pulled itself
              //     terminates the pipeline after 5 pulls
    .collect(toList()); // <-- pulls data from the pipeline into the list

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM