Обновление значения класса дела Scala внутри карты
Я имею:
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))
}
И я пытаюсь обновить значения для count каждый раз, когда ключ существует на карте,
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))
}
}
Но это не работает. Как правильно это сделать? пожалуйста!
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
: Get возвращает Option[WordCount]
, fold
вызывает свой первый параметр, если его получатель None
иначе (т.е. Some
) он вызывает второй параметр и передает ему значение Some
содержит.