2011-11-27 9 views
7

Tenía una lista bastante grande de números. Necesitaba aplicar alguna operación sobre ellos, luego tomar solo aquellos resultados que satisfacen alguna condición. La lista es secuencial, así que una vez que encuentre el número que no satisface la condición, puedo dejar de buscar.Excepcional excepción al usar .view en la lista

quería evitar hacer demasiado computación, por lo que se trasladaron como en este ejemplo:

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

pero me da una excepción:

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) 

Usando Scala 2.9.0.1 (igual comportamiento con 2.9.1). ¿Que esta mal aquí?

+0

Funciona bien con 2,8 –

Respuesta

5

Parece un error. (Informe un error, si no está ya se ha informado y/o arreglado!)

Mientras tanto, puede utilizar iterador como una solución para este código particular:

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

(deje caer el .toList si estoy feliz de terminar con un iterador).

Cuestiones relacionadas