如果没有在scala中映射的话

时间:2018-02-08 11:20:40

标签: scala collections

我有以下地图:

val m: mutable.Map[String, Long] = mutable.Map()

如果不存在,我想给它一些价值。如果它依次存在,我想进行一些计算:

目前我是按照以下方式进行的:

val key: String = //...
val value: Long = //...
m(key) = m.getOrElse(key, 0L) + value

但这对我来说有点冗长(在Java中我们有putIfAbsent方法)。在Scala中有更短的方法吗?

2 个答案:

答案 0 :(得分:6)

您正在寻找mutable.Map.getOrElseUpdate

m.getOrElseUpdate(key, value)

答案 1 :(得分:4)

对于mutable maps,您可以覆盖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)