2011-08-12 39 views
5

我的代碼片段如下如何正確使用Scala Hashmaps和Options?

import scala.collection.mutable.HashMap 

val crossingMap = new HashMap[String, Option[Long]] 
val crossingData: String = ... 
val time: Long = crossingMap.get(crossingData).getOrElse(0) 

我得到以下編譯錯誤

error: type mismatch; 
found : Any 
required: Long 
val time: Long = crossingMap.get(crossingData).getOrElse(0) 
+6

提示:類型'crossingMap的.get(crossingData)'是'Option [Option [Long]]'。 – 2011-08-12 22:58:40

+0

如果你將一個'String'映射到'None',那麼你最好不要把映射放在第一位,對不對?這就是爲什麼(正如Kipton Barros所建議的那樣),你可能需要一個'HashMap [String,Long]'。 – Blaisorblade

回答

4

你可能想crossingMap包含String -> Long雙。然後,你可以做到以下幾點,

val crossingMap = new HashMap[String, Long] 
val crossingData: String = "" 
val time: Long = crossingMap.getOrElse(crossingData, 0) 

如果你確實想crossingMap值有型Option[Long],那麼你就必須做這樣的事情,

val crossingMap = new HashMap[String, Option[Long]] 
val crossingData: String = "" 
val time: Long = crossingMap.getOrElse(crossingData, None).getOrElse(0)