2011-11-27 20 views
7

我有一個很大的數字列表。我需要對它們進行一些操作,然後只取得滿足某些條件的結果。名單是連續的,所以一旦我找到不符合條件的號碼,我可以停止查看。奇怪的例外,當在列表上使用.view時

我想避免做過多的計算,所以我在這個例子中移動像:

List(1,2,3,4,5).view.map(2 *).takeWhile(_ < 8) 

但它給了我一個例外:

java.lang.UnsupportedOperationException: SeqViewM(...).newBuilder 
at scala.collection.TraversableViewLike$class.newBuilder(TraversableViewLike.scala:69) 
at scala.collection.SeqViewLike$$anon$3.newBuilder(SeqViewLike.scala:77) 
at scala.collection.IterableLike$class.takeWhile(IterableLike.scala:139) 
at scala.collection.SeqViewLike$$anon$3.takeWhile(SeqViewLike.scala:77) 
at scala.collection.SeqViewLike$$anon$3.takeWhile(SeqViewLike.scala:77) 

使用斯卡拉2.9.0.1(同行爲與2.9.1)。這裏有什麼問題?

+0

工作得很好2.8 –

回答

5

看起來像一個錯誤。 (發送錯誤報告,如果它尚未被報告和/或固定!)

在此期間,你可以使用迭代器作爲一種變通方法爲這個特殊的代碼:

List(1,2,3,4,5).iterator.map(2 *).takeWhile(8 >).toList 

(降.toList如果很高興結束了一個迭代器)。