arrays scala filter multiple-conditions

arrays - Filtro Scala en dos condiciones



filter multiple-conditions (3)

Me gustaría filtrar mi conjunto de datos en dos condiciones a la vez.

¿Es posible?

Quiero algo como esto:

mystuff = mystuff.filter(_.isX && _.name == "xyz")


Si bien puede haber algún impacto en el rendimiento según lo que sea "myStuff", siempre se puede filtrar dos veces

mystuff = mystuff.filter(_.isX).filter(_.name == "xyz")


Si necesita filtrar con frecuencia con varios predicados, podría definir una forma de combinarlos:

case class And[A]( p1: A=>Boolean, p2: A=>Boolean ) extends (A=>Boolean) { def apply( a: A ) = p1(a) && p2(a) }

Aquí se explica cómo usarlo para mantener solo los números impares más grandes que 10:

scala> (0 until 20) filter And( _ > 10, _ % 2 == 1 ) res3: scala.collection.immutable.IndexedSeq[Int] = Vector(11, 13, 15, 17, 19)

Es fácil escribir Or y Not combinadores de la misma manera.


Usando una sintaxis lambda ligeramente menos conciso:

mystuff = mystuff.filter(x => (x.isX && x.name == "xyz"))

Puede encontrar más detalles sobre la sintaxis de la función anónima de Scala here .