Kotlin-如何增加可变地图的价值

Kotlin-如何增加可变地图的价值,kotlin,hashmap,Kotlin,Hashmap,我想在Kotlin laguage中的mutableMap的特定项值中添加1。 下面是我做的。 有没有办法使这段代码变得简单 map[1] = map[1]?.let {it -> it + 1 } ?: 1 也许你可以使用: 您可以通过在处理null之后进行加法来简化这一点: map[1] = (map[1] ?: 0) + 1 如果您经常这样做,可以将其添加为扩展函数,例如: fun <T> MutableMap<T, Int>.increment(key:

我想在Kotlin laguage中的mutableMap的特定项值中添加1。 下面是我做的。 有没有办法使这段代码变得简单

map[1] = map[1]?.let {it -> it + 1 } ?: 1
也许你可以使用:


您可以通过在处理null之后进行加法来简化这一点:

map[1] = (map[1] ?: 0) + 1
如果您经常这样做,可以将其添加为扩展函数,例如:

fun <T> MutableMap<T, Int>.increment(key: T, defaultValue: Int = 0) {
    this[key] = (this[key] ?: defaultValue) + 1
}

您可以将其扩展为加减除1以外的数字。  (虽然在这种情况下,您可能需要更改函数名。)

我认为没有一种干净的方法可以做到这一点,因为我们总是要处理密钥不存在的情况

您可以使用JDK。这将添加一个值为
1
的新键(如果该键不存在)

map.merge(1, 1, Int::plus)
但这感觉不太像我。因此,您可以将其包装在扩展函数中:

fun MutableMap<Int, Int>.increment(key: Int) = merge(key, 1, Int::plus)
输出:

{1=2}
{1=3}
{1=3, 2=1}
map.merge(1, 1, Int::plus)
fun MutableMap<Int, Int>.increment(key: Int) = merge(key, 1, Int::plus)
fun main() {
    val map = mutableMapOf(1 to 1)
    map.merge(1, 1, Int::plus)
    println(map)
    map.increment(1)
    println(map)
    map.increment(2)
    println(map)
}
{1=2}
{1=3}
{1=3, 2=1}