我有:
var targets = mutable.HashMap[String, WordCount]()
WordCount是一个案例类:
case class WordCount(name: String,
id: Int,
var count: Option[Double]) {
def withCount(v: Double) : WordCount = copy(count = Some(v))
}
我每次在地图中存在密钥时都会尝试更新计数值,
def insert(w1: String, w2: String, count: Double) = {
if(targets.contains(w1)){
var wc = targets.get(w1).getOrElse().asInstanceOf[WordCount]
wc.withCount(9.0)
} else{
targets.put(w1, WordCount(w1, idT(), Some(0.0))
}
}
但它不起作用。这样做的正确方法是什么?请!
答案 0 :(得分:1)
调用withCount
不会修改案例类实例,但会创建一个新实例。因此,您必须再次将新创建的实例存储在地图中:
def insert(w1: String, w2: String, count: Double) = {
val newWC = targets.get(w1).fold {
WordCount(w1, idT(), Some(0.0)
} { oldWC =>
oldWC.withCount(9.0)
}
targets.put(w1, newWC)
}
注意targets.get(w1).fold
:获取返回Option[WordCount]
,fold
调用其第一个参数,如果其接收者是None
,否则(即其Some
它调用第二个参数并将Some
包含的值传递给它。