惯用Scala:根据条件映射选项

时间:2016-09-20 07:00:50

标签: scala

我有两个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中更具惯用性或更好的方法是什么?

5 个答案:

答案 0 :(得分:9)

您可以使用Option.collect

  

返回scala.Some,其中包含将pf应用于此的结果   如果此选项为非空并且scala.Optionpf,则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)