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
1条答案
按热度按时间mbzjlibv1#
Java中 stream pipelines 的惰性求值与lambdas无关。
只有当最后一个站要求更多数据时,才评估 * 流管道 * 中除最后一个站之外的所有站。当最后一个站从最后一个站拉取一秒时,那个站从它之前的一个站拉取,依此类推,直到最后新数据的请求一路送到供应商。然后,供应商提供下一个值,该值通过管道被传播回(实际上是向前)到最后一个阶段(收集器或forEach),并且循环重复。
这种方法不需要流水线实现过度生产和/或缓冲任何东西。这对CPU和内存占用非常有利,而这通常对Java应用程序来说是一个很大的偏差。
示例: