2011-06-17 81 views
11

輸出映射值我有以下代碼片段:問題的在階

val map = new LinkedHashMap[String,String] 
map.put("City","Dallas") 
println(map.get("City")) 

此輸出Some(Dallas),而不是僅僅Dallas。我的代碼有什麼問題?

謝謝

回答

12

這不是一個真正的問題。

雖然Java的地圖版本使用null表明,一個關鍵沒有關聯的值,Scala的Map[A,B].get回報Options[B],它可以是Some[B]None,並沒有起到類似的作用Java的null。顯示

REPL會話爲什麼這是有用的:

scala> map.get("State") 
res6: Option[String] = None 

scala> map.get("State").getOrElse("Texas") 
res7: String = Texas 

還是不推薦,但簡單get

scala> map.get("City").get 
res8: String = Dallas 

scala> map.get("State").get 
java.util.NoSuchElementException: None.get 
     at scala.None$.get(Option.scala:262) 

檢查Option文檔更多的好東西。

+0

感謝您的回覆。但是如何讓它只輸出值而不是Some(value)? – Tom 2011-06-17 12:06:12

+0

@Tom我剛剛添加了一個如何使用它的例子。 – pedrofurla 2011-06-17 12:11:49

18

使用apply方法,直接返回String,如果關鍵是沒有找到拋出一個NoSuchElementException

scala> import scala.collection.mutable.LinkedHashMap 
import scala.collection.mutable.LinkedHashMap 

scala> val map = new LinkedHashMap[String,String] 
map: scala.collection.mutable.LinkedHashMap[String,String] = Map() 

scala> map.put("City","Dallas") 
res2: Option[String] = None 

scala> map("City") 
res3: String = Dallas 
2

有兩個方法可以處理Option結果。

您可以模式相匹配他們:

scala> map.get("City") match { 
| case Some(value) => println(value) 
| case _ => println("found nothing") 
| } 
Dallas 

或者有某個地方在編程出現在斯卡拉另一個整齊的做法。使用foreach來處理結果。如果結果是Some,那麼它將被使用。否則(如果它是None),沒有任何反應:

scala> map.get("City").foreach(println) 
Dallas 

scala> map.get("Town").foreach(println)