2015-08-08 86 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'被禁止 –