我有两个val
,一个condition
和一个option
。请注意,condition
是一个简单的布尔值,不取决于选项的值。
如果condition
成立,我想映射选项以将其转换为结果值。在所有其他情况下,我想返回defaultResult
。
这有效并且非常易读,但我不喜欢defaultResult
:
val result = if (condition) {
option.map(valueToResult).getOrElse(defaultResult)
} else {
defaultResult
}
我的第二种方法没有重复,但我不喜欢过滤器被滥用于实际上并不依赖于选项值的事实:
val result = option.filter(_ => condition).map(valueToResult).getOrElse(defaultResult)
Scala中更具惯用性或更好的方法是什么?
答案 0 :(得分:9)
您可以使用Option.collect
:
返回
scala.Some
,其中包含将pf
应用于此的结果 如果此选项为非空并且scala.Option
为pf
,则val result = option.collect { case x if condition => valueToResult(x) }.getOrElse(defaultResult)
包含值 为该值定义。
$.getJSON()
答案 1 :(得分:3)
val result = option match {
case Some(value) if condition => valueToResult(value)
case _ => defaultResult
}
答案 2 :(得分:1)
z=(u.==v)
答案 3 :(得分:1)
Document document = Jsoup.parse(s);
Element table = document.select("table[class=competitionRanking tablesorter]").first();
for (Element element:table.select("tr")){
for (Element td:element.select("td")){
System.out.println(td.text());
}
}
答案 4 :(得分:0)
val result = (condition match {
case true => option.map(valueToResult)
case false => None
}).getOrElse(defaultResult)