Je voudrais filtrer mon ensemble de données sur deux conditions à la fois.
C'est possible?
Je veux quelque chose comme ça:
mystuff = mystuff.filter(_.isX && _.name == "xyz")
Utilisation d'une syntaxe lambda légèrement moins concise:
mystuff = mystuff.filter(x => (x.isX && x.name == "xyz"))
Vous pouvez trouver plus de détails sur Scala syntaxe de fonction anonyme ici .
Bien qu'il puisse y avoir un impact sur les performances en fonction de ce qu'est "myStuff", vous pouvez toujours filtrer deux fois
mystuff = mystuff.filter(_.isX).filter(_.name == "xyz")
Si vous devez filtrer fréquemment avec plusieurs prédicats, vous pouvez définir un moyen de les combiner:
case class And[A]( p1: A=>Boolean, p2: A=>Boolean ) extends (A=>Boolean) {
def apply( a: A ) = p1(a) && p2(a)
}
Voici comment l'utiliser pour ne garder que les nombres impairs supérieurs à 10:
scala> (0 until 20) filter And( _ > 10, _ % 2 == 1 )
res3: scala.collection.immutable.IndexedSeq[Int] = Vector(11, 13, 15, 17, 19)
Il est facile d'écrire les combinateurs Or
et Not
de la même manière.