假设我有一个 Option[A => Boolean]
, 一个 List[A]
,以及我想在该列表的子集上执行的一些操作。如果设置了该选项,那么我想先过滤列表,然后应用我的操作。如果没有,那么我想将它应用于整个列表。一个例子:
val a : Option[Int => Boolean] = Option((a : Int) => a % 2 == 0)
val b = 1 to 100
我可以轻松地做到以下几点:
val c = if (a.isDefined) b.filter(a.get) else b
但是,这涉及到调用
a.get
;太多的条件让我无法做到这一点!我也可以这样做:val c = b.filter(a.getOrElse(_ => true))
这感觉更好,但现在我被困在为我的序列的每个元素执行第二次(尽管微不足道)操作。我希望它会被优化,但这仍然感觉不完美。
我想要的是缺少任何一个缺陷的东西。感觉应该有一个很好的方法来做到这一点 - 有什么想法吗?
最佳答案
您只需要使用正常的选项处理方法:
a.map(b.filter).getOrElse(b)
关于scala - 有条件地过滤一个序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9180812/