我有两个val,一个condition和一个option.请注意,这condition是一个简单的布尔值,不依赖于选项的值.
如果condition成立,我想映射选项以将其转换为结果值.在所有其他情况下,我想返回一个defaultResult.
这有效并且非常易读,但我不喜欢重复defaultResult:
val result = if (condition) {
option.map(valueToResult).getOrElse(defaultResult)
} else {
defaultResult
}
Run Code Online (Sandbox Code Playgroud)
我的第二种方法没有重复,但我不喜欢过滤器被滥用于实际上并不依赖于选项值的事实:
val result = option.filter(_ => condition).map(valueToResult).getOrElse(defaultResult)
Run Code Online (Sandbox Code Playgroud)
在Scala中有什么更惯用或更好的方法?
你可以使用Option.collect:
如果此选项为非空且为该值定义,则返回
scala.Some包含应用于pf此scala.Option包含值的结果的apf.
val result = option.collect {
case x if condition => valueToResult(x)
}.getOrElse(defaultResult)
Run Code Online (Sandbox Code Playgroud)