我有以下地图:
val m: mutable.Map[String, Long] = mutable.Map()
如果它不存在,我只想为其添加一些值。如果它依次出现,我想执行一些计算:
目前我通过以下方式进行:
val key: String = //...
val value: Long = //...
m(key) = m.getOrElse(key, 0L) + value
但这对我来说感觉有点冗长(在 Java 中我们有
putIfAbsent
方法)。在 Scala 中是否有更短的方法来做到这一点?
对于 可变映射,您可以重写
default
方法,或使用 withDefault
添加默认计算,以便它在第一次访问时自动计算所有缺失值:
val m = new HashMap[String, Int].withDefault(k => 0)
然后您可以像这样更新值:
m("foo") += 5
m("bar") += 7
m("foo") += 37
println(m) // Map(foo -> 42, bar -> 7)
或者只是使用
getOrElseUpdate
:
val m = collection.mutable.HashMap.empty[String, Long]
val k = "the key"
m(k) = m.getOrElseUpdate(k, 0L) + 1