如何在 map 函数中处理 Scala 中的条件逻辑?

How to handle conditional logic in Scala within the map function?

我得到了一小段 Scala 代码,我想对其进行优化以使其更具功能性。

我得到了以下内容

val foo: Option[Double]
val bar: Map[String, Double]

以及一个采用 Option[Map[String, Double]]

的方法

所以在我的业务逻辑中,我尝试确定是否定义了 foo。如果是,我必须将 None 传递给该方法,因为 foobar 不能同时存在。

我目前的处理方式如下

val newOptionalMap = if (foo.isDefined) {
      None
    } else {
      Some(bar)
    }
myFunction(newOptionalMap)

我想把它变成一个更实用的方法。我试过

val newOptionalMap = foo.map(_ => bar)

但这是失败的,因为它从未真正将 bar 定义为 None,因此我的方法失败了,因为它不期望 foobar同时定义。

我可以采用哪种函数式方法来简化条件逻辑?

有两种方法可以解决您的问题。

如@jwvh 所述,您可以轻松使用 fold:

val newOptionalMap = foo.fold(Option(bar))(_ => None))

另一种方法是使用模式匹配:

val newOptionalMap = foo match {
   case Some(_) => None
   case _ => Some(bar)
}

Here 有关于折叠或模式匹配用法的讨论,