假设我有
var mp = Map[String,String]()
.....
val n = mp("kk")
如果密钥“kk”不存在,上面将抛出运行时错误。
我预计在密钥不存在的情况下,n将为null。如果密钥不存在,我希望n为null。
使用短代码示例在scala中处理这种情况的正确方法是什么?
答案 0 :(得分:48)
首先,你可能并不真的想要null,因为这几乎总是Scala中编码错误的标志。你想要的是n是Option [String]类型,它表示该值是String或缺失。正确的方法是使用地图上的.get()方法
val n = mp.get("kk")
如果确实需要null(例如,对于Java库的互操作),可以使用.getOrElse()
val n = mp.getOrElse("kk", null)
答案 1 :(得分:20)
试试这个:
val valueOpt = mp.get("kk")
您的结果属于Option[String]
类型,可以是None
或Some(actualValue)
。您可以使用模式匹配来查找:
valueOpt match {
case Some(value) => println(value)
case None => println("default")
}
然而,更合适的方法是使用Option
上的方法,例如:
println(valueOpt.getOrElse("default"))
查找Option
there的API文档。
修改:请注意,Map
本身也直接定义了getOrElse
方法,如Dave的回答所示。
答案 2 :(得分:0)
val conversionRatios:mutable.Map[String, Double] = mutable.Map[String, Double](
"USD" -> 2.0,
"CNY" -> 3.0
)
val currentRate = conversionRatios.apply(key) // it will return you value or NoSuchElementException will be thrown