Scala中Iterator和Stream之间的区别?

时间:2009-10-06 20:33:03

标签: scala

似乎Iterator和Stream都是懒惰的,并且允许您将元素保留在心脏的内容中。这两者有什么区别?

2 个答案:

答案 0 :(得分:46)

Stream memoises而Iterator没有。您可以多次遍历同一个Stream并且每次都获得相同的结果。另一方面,迭代器只能遍历一次。

答案 1 :(得分:19)

它们都是用于访问当前元素的构造,具有尚未知的剩余元素列表(惰性尾部)。

Iterator是一个命令式构造,你只能遍历一次。

Stream是一个功能构造。从理论上讲,你可以多次遍历它(正如其他人提到的,它不会重新计算已经计算过的部分),但实际上因为Streams要么无限大,要么非常大(这就是你首先使用它的原因),持有对完整流的引用没有多大意义(你很容易遇到Out Of Memory)。

一般来说,避免普通Stream是更安全的。替代方案是使用EphemeralStream Scalaz,它使用弱引用自动忘记未推荐的部分,或使用Iteratees(另请参阅here)或something similiar