2015-08-08 68 views
1

我想通过我有一个示例项目来学习斯卡拉。其中有一个变量记录定义为:斯卡拉 - 迭代器被'消耗'

val records: Iterator[Product2[K, V]] 

它以不同的方法传递。我用探索的内容:

records.foreach(println) 

然而,当我尝试打印再次使用这个迭代的内容,即使在连续的代码行,我没有得到任何结果。似乎迭代器被消耗。如何防止它发生,并能够探索迭代器的内容,而不会使其对代码的其余部分无用?

回答

6

一种Iterator延伸TraversableOnce,因此只能使用一次迭代结束,因为它代表一个突变指针成Iterable。如果你想要的东西,可以穿越的反复和不影响多个并行访问,你需要使用Iterable而是延伸Traversableforeach创建这种特定情况下

+2

烨新Iterator,例如,调用'迭代器上的.toStream'('Stream'是'Iterable'的子类型)是获得可以重复遍历的结构的一种方法(然而,因为它是懒惰的,不会立即遍历第一个项目)。 –

+0

@Arne Claassen,有没有办法将** Iterator **转换为** Iterable **。我在问,因为我正在研究在整个类和特性中使用迭代器的项目,并且我不可能将它们全部更改为** Iterable **。 –

+0

@HaseebJaved'Iterator'具有'.toIterable'或者甚至'toList','toVector'等等。唯一需要注意的是'Iterator'并没有被用于从一些_IO_源流式传输数据,因为它实现了它到一个内存中的'Traversable'被禁止 –