【发布时间】:2019-02-25 13:32:55
【问题描述】:
我有一个包含各种指标数据的 Map[String, Boolean] 和一个包含 metricKeys 的单独 Seq[String]。
问题是地图可能不包含所有metricKeys,但我还需要保留有关不存在值的信息。
我试图通过使用.getOrElse 来解决这个问题。我预计生成的带有度量值的List[String] 将包含true 的“Y”、false 的“N”和null 值的“”。
但是我收到警告:unreachable code case _ => StringUtils.EMPTY。
使默认值也正确匹配的正确方法是什么?
def parseMetrics(metric: Metric): List[String] = {
import scala.collection.JavaConverters._
val metricKeys: Seq[String] = getMetricKeys
val matricsData = metric.transactionMap.asScala
metricKeys.map(key => key -> matricsData.getOrElse(key, null))
.toMap.values.map(Predef.Boolean2boolean).collect {
case true => "Y"
case false => "N"
case _ => StringUtils.EMPTY
}.toList
}
【问题讨论】:
-
你认为布尔值的第三个值是什么?
-
true 和 false 是布尔值仅有的两个值。如果您正在对布尔值进行匹配,则尝试使用任何不正确或不正确的情况都会引发此警告。此外,您不应该在 Scala 中使用
null。
标签: java scala collections pattern-matching