有没有更好的方法可以关注?
val v = map.get(key)
v match {
case None => default
case Some(str) => {
if(str == null) default else str << how to avoid additional null check here
}
}
答案 0 :(得分:6)
Option.apply
智能地使用null
:
val myNullString: String = null
Option(myNullString) //None
所以一个选项是:
map.get(key).flatMap(Option.apply).getOrElse(default)
您还可以先从地图中过滤掉所有null
值。对于这些类型的操作,您可能还会对getOrElse
上的withDefaultValue
或Map
方法感兴趣:
map.filter(_._2 != null).getOrElse(key, default)
map.filterNot(_._2 == null).withDefaultValue(default)(key)
你也可以在这里使用collectFirst
(这是更一般的,因为你可以将它应用于任意键值元组,但是你失去了常量查找的效率):
map collectFirst { case (`key`, str) if str != null => str } getOrElse default