scala types scala-2.8 scala-collections

Tipo de colección Scala para filtro



types scala-2.8 (3)

Supongamos que tiene una Lista (1, "1"), está tipeada Lista [Cualquiera], que por supuesto es correcta y esperada. Ahora si mapeo la lista como esta

scala> List(1, "1") map { | case x: Int => x | case y: String => y.toInt | }

el tipo resultante es List [Int], que también se espera. Mi pregunta es si existe un mapa equivalente para filtro porque el siguiente ejemplo dará como resultado una lista [Cualquiera]. es posible? Supongo que esto podría resolverse en tiempo de compilación y posiblemente no en tiempo de ejecución.

scala> List(1, "1") filter { | case x: Int => true | case _ => false | }


Con respecto a su pregunta modificada, si simplemente usa un guardia en el caso que comprende su función parcial, obtiene el filtrado:

scala> val l1 = List(1, 2, "three", 4, 5, true, 6) l1: List[Any] = List(1, 2, three, 4, 5, true, 6) scala> l1.partialMap { case i: Int if i % 2 == 0 => i } res0: List[Int] = List(2, 4, 6)


Para cualquiera que se encuentre con esta pregunta preguntándose por qué la respuesta más votada no funciona para ellos, tenga en cuenta que el método partialMap se renombró antes de la versión final de Scala 2.8. Pruebe esto en su lugar:

scala> List(1, "1") collect { | case x: Int => x | } res0: List[Int] = List(1)

(Esto realmente debería ser un comentario sobre la respuesta de otra manera maravillosa de Daniel C. Sobral, pero como nuevo usuario, no puedo comentar aún).


Scala 2.9:

scala> List(1, "1") collect { | case x: Int => x | } res0: List[Int] = List(1)