Чем отличается Iterator от Stream в Scala? - PullRequest
53 голосов
/ 07 октября 2009

Кажется, что Iterator и Stream являются ленивыми и позволяют вам возвращать элементы к своему сердцу. Какая разница между ними?

Ответы [ 2 ]

46 голосов
/ 07 октября 2009

Stream запоминает , а Iterator - нет. Вы можете проходить один и тот же поток несколько раз и каждый раз получать один и тот же результат. Итератор, с другой стороны, может быть пройден только один раз.

19 голосов
/ 21 сентября 2012

Они оба являются конструкциями для доступа к текущему элементу, имея еще неизвестный список оставшихся элементов (ленивый хвост).

Iterator - это императивная конструкция, которую вы можете пройти только один раз.

Stream является функциональной конструкцией. Теоретически вы можете проходить его несколько раз (и, как уже упоминалось, он не будет пересчитывать уже вычисленные части), но на практике, потому что потоки либо бесконечны, либо очень велики (именно поэтому вы используете его в первую очередь), удерживая ссылка на полный поток не имеет особого смысла (вы легко сталкиваетесь с нехваткой памяти).

Обычно разуму безопаснее избегать простых Stream с. В качестве альтернативы используется EphemeralStream из Scalaz, который автоматически забывает ненужные части, используя слабые ссылки, или Итерирует (см. Также здесь ) или что-то похожее .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...