如何解析未收到的Map值和函数调用?

时间:2019-06-19 19:18:43

标签: scala collections pattern-matching

最初,我编写了一种方法来解析各种指标的布尔值,并且只对获取truefalse感兴趣。因此,我使用fold处理非空选项的值。

    def parseMetrics(metricKeys: Seq[String], metricsMap: mutable.Map[String, lang.Boolean],
                   transactionValue: String): List[String] = {
    metricKeys.map { metricKey =>
      metricsMap.get(metricKey).fold(StringUtils.EMPTY) { metricValue =>
        if (metricValue) "Y" else "N"
      }
    }.toList
  }

现在,我决定更改逻辑以使用度量值为null且metricsMap.get(metricKey)返回None的情况

//伪代码

val maybeBoolean = metricsMap.get(metricKey)
case Some(maybeBoolean) - evaluate metricValue to "Y" or "N" as before
case None && isValidTransaction(transactionValue) then metricValue = "V"

但是我可能缺少一些东西,在这种情况下模式匹配不起作用。函数isValidTransaction(transactionValue)无法解析。而我尝试匹配None和函数调用失败。

我应该如何修正逻辑以使其正常工作?

1 个答案:

答案 0 :(得分:4)

尝试

def parseMetrics(metricKeys: Seq[String], metricsMap: Map[String, Boolean], transactionValue: String): List[String] = {
  metricKeys.map(metricsMap.get).map {
    case Some(true) => "Y"
    case Some(false) => "N"
    case None if isValidTransaction(transactionValue) => "V"
    case None => "unknown"
  }.toList
}