Las transmisiones son como listas que generan sus miembros a medida que se requieren. Una vez que se ha generado un elemento, se retiene en la secuencia y se reutiliza.
Por ejemplo:
lazy val naturals: Stream[Int] = Stream.cons(0, naturals.map{_ + 1})
le dará una corriente de los números naturales. Si llamo
naturals(5)
generará elementos 0-5 y volver 5, a continuación, si yo llamo
naturals(8)
Se reutilizará los primeros 6 elementos y generar 3 más.
Si le preocupa el uso de la memoria, puede usar Stream.drop(num)
para generar una nueva secuencia con num
elementos eliminados desde el principio, lo que permite que los elementos truncados se recolecten con la antigua. Por ejemplo:
naturals(5) //returns 5
val truncated = naturals.drop(4)
truncated(5) //returns 9
No debe pensar en 'Stream's como' Iterator's, sino más bien como 'List's cuya evaluación se puede retrasar. [Esta pregunta y sus respuestas] (http://stackoverflow.com/questions/1527962/difference-between-iterator-and-stream-in-scala) pueden ayudar. – Philippe