簡體   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