2011-07-02 51 views
20

假設我有如何在scala中找不到鍵時使用鍵訪問map的值?

var mp = Map[String,String]() 

..... 

val n = mp("kk") 

以上將拋出運行時錯誤的情況下,關鍵的「KK」是不存在的。

我預計n在密鑰不存在的情況下將爲空。如果密鑰不存在,我希望n爲空。

什麼是正確的方式來處理這種情況在斯卡拉短代碼示例?

+7

切勿在scala中使用'null'。空值被選項「替換」。 – paradigmatic

回答

43

首先,您可能並不是真的想要null,因爲這幾乎總是Scala中編碼不良的標誌。你想要的是n的類型是Option [String],它表示該值是一個String或缺少。要做到這一點,正確的做法是與獲得()方法對你映射

val n = mp.get("kk") 

如果你真的需要空(與Java庫的互操作,例如),您可以使用.getOrElse()

val n = mp.getOrElse("kk", null) 
+14

mp.get(「kk」)。orNull :) –

17

試試這個:

val valueOpt = mp.get("kk") 

你的結果是Option[String]型的,可以是NoneSome(actualValue)。您可以使用模式匹配,找出:

valueOpt match { 
    case Some(value) => println(value) 
    case None => println("default") 
} 

一個更合適的方式做這種事情,然而,就是用在Option的方法,例如:

println(valueOpt.getOrElse("default")) 

查找的API文檔爲Optionthere

編輯:注意Map本身直接定義了一個getOrElse方法,也因爲在Dave的答案中。

相關問題