最初,我编写了一种方法来解析各种指标的布尔值,并且只对获取true
和false
感兴趣。因此,我使用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和函数调用失败。
我应该如何修正逻辑以使其正常工作?
答案 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
}