Разница между итератором и потоком в Scala?


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

2 53

2 ответа:

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

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

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

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

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