Strumienie są jak listy, które generują swoich członków, ponieważ są wymagane. Po wygenerowaniu elementu zostaje on zachowany w strumieniu i ponownie wykorzystany.
Na przykład:
lazy val naturals: Stream[Int] = Stream.cons(0, naturals.map{_ + 1})
daje strumień liczb naturalnych. Jeśli zgłoszę
naturals(5)
generuje elementów 0-5 i powrotu 5, jeśli następnie wywołać
naturals(8)
To ponowne 6 pierwszych elementów i wygenerować trzy inne.
Jeśli chodzi o zużycie pamięci, można użyć Stream.drop(num)
produkować nowy strumień z usuniętymi elementami num
od początku, dzięki czemu elementy ścięte być zbierane śmieci ze starego strumienia. Na przykład:
naturals(5) //returns 5
val truncated = naturals.drop(4)
truncated(5) //returns 9
Nie powinieneś myśleć o 'Stream's jako' Iteratorze', ale raczej o 'List'', którego ocena może być opóźniona. [To pytanie i jego odpowiedzi] (http://stackoverflow.com/questions/1527962/difference-between-iterator-and-stream-in-scala) może pomóc. – Philippe