scala - map.get为null键返回None,但不为null值返回

时间:2015-07-07 00:26:42

标签: scala

有没有更好的方法可以关注?

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
        }
      }

1 个答案:

答案 0 :(得分:6)

Option.apply智能地使用null

val myNullString: String = null
Option(myNullString) //None

所以一个选项是:

map.get(key).flatMap(Option.apply).getOrElse(default)

您还可以先从地图中过滤掉所有null值。对于这些类型的操作,您可能还会对getOrElse上的withDefaultValueMap方法感兴趣:

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