假设我有一个Option[A => Boolean],一个List[A]和一些我希望在该列表的子集上执行的操作.如果设置了该选项,那么我想首先过滤列表然后应用我的操作.如果没有,那么我想将它应用于整个列表.一个例子:
val a : Option[Int => Boolean] = Option((a : Int) => a % 2 == 0)
val b = 1 to 100
Run Code Online (Sandbox Code Playgroud)
我可以轻松地做到以下几点:
val c = if (a.isDefined) b.filter(a.get) else b
Run Code Online (Sandbox Code Playgroud)
但是,这涉及到呼叫a.get; 很多条件让我无法做到这一点!我也可以这样做:
val c = b.filter(a.getOrElse(_ => true))
Run Code Online (Sandbox Code Playgroud)
这感觉更好,但现在我仍然坚持为我序列的每个元素执行第二次(尽管是微不足道的)操作.我希望它会被优化,但这仍然感觉不完美.
我想要的是缺少任何缺陷的东西.感觉应该有一个很好的方式去做 - 任何想法?
Rex*_*err 10
您只需要使用正常的选项处理方法:
a.map(b.filter).getOrElse(b)
Run Code Online (Sandbox Code Playgroud)