我想一次过滤两个条件下的数据集。
有可能吗?
我想要这样的事情:
mystuff = mystuff.filter(_.isX && _.name == "xyz")
答案 0 :(得分:66)
使用稍微简洁的lambda语法:
mystuff = mystuff.filter(x => (x.isX && x.name == "xyz"))
您可以在Scala匿名函数语法here上找到更多详细信息。
答案 1 :(得分:8)
虽然根据“myStuff”的内容可能会对性能产生影响,但您总是可以过滤两次
mystuff = mystuff.filter(_.isX).filter(_.name == "xyz")
答案 2 :(得分:5)
如果您需要经常使用多个谓词进行过滤,则可以定义一种组合它们的方法:
case class And[A]( p1: A=>Boolean, p2: A=>Boolean ) extends (A=>Boolean) {
def apply( a: A ) = p1(a) && p2(a)
}
以下是如何使用它来仅保留大于10的奇数:
scala> (0 until 20) filter And( _ > 10, _ % 2 == 1 )
res3: scala.collection.immutable.IndexedSeq[Int] = Vector(11, 13, 15, 17, 19)
以同样的方式编写Or
和Not
组合器很容易。