7

我有一个相当大的数字列表。我需要对它们进行一些操作,然后只取那些满足某些条件的结果。该列表是连续的,所以一旦我找到不满足条件的数字,我就可以停止查找。

我想避免做太多的计算,所以我像这个例子一样继续前进:

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)

使用 Scala 2.9.0.1(与 2.9.1 的行为相同)。这里有什么问题?

4

1 回答 1

5

看起来像一个错误。(如果尚未报告和/或修复,请提交错误报告!)

同时,您可以使用迭代器作为此特定代码的解决方法:

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

.toList如果您很高兴最终得到一个迭代器,请放弃)。

于 2011-11-27T09:02:21.397 回答