两个条件斯卡拉过滤器(Scala filter on two conditions)

2019-07-30 01:17发布

我想一次筛选两个条件我的数据集。

可能吗?

我想是这样的:

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

Answer 1:

使用稍少简洁lambda语法:

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

你可以找到斯卡拉匿名函数的语法更详细的在这里 。



Answer 2:

虽然根据什么“的MyStuff”是可能会有一些性能影响,你总是可以过滤两次

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


Answer 3:

如果您需要经常与几个谓词筛选,你可以定义结合他们的一种方式:

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)

它很容易写OrNot组合子以同样的方式。



文章来源: Scala filter on two conditions