Вы могли бы создать Iterable
вместо Stream
. Ваш Iterable
должен предоставить метод iterator
, который возвращает итератор с методами hasNext
и next
.
Когда вы перебираете Iterable
, hasNext
и next
будут вызываться для генерации элементов по мере необходимости, но они нигде не хранятся (как Stream
).
Простой пример:
class Numbers extends Iterable[Int] {
def iterator = new Iterator[Int] {
private var num = -1
def hasNext = num < 99
def next = { num += 1; num }
}
}