Странное исключение при использовании.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)

Использование Scala 2.9.0.1 (такое же поведение с 2.9.1). Что здесь не так?

1 ответ

Решение

Похоже, ошибка. (Подайте отчет об ошибке, если он еще не сообщен и / или не исправлен!)

В то же время вы можете использовать итератор в качестве обходного пути для этого конкретного кода:

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

(бросьте .toList если вы счастливы в конечном итоге с итератором).

Другие вопросы по тегам