Kotlin: если HashMap не содержит определенного значения, создайте ключ - PullRequest
0 голосов
/ 21 января 2020

У меня есть следующий HashMap:

val myHashMap: HashMap<key, ValueClass>

где:

data class ValueClass(
    var a: Long = 0,
    var b: Long = 0
)

Я хотел бы использовать myHashMap следующим образом: если myHashMap не содержит ключ x, создайте новый ValueClass и вставьте его в myHashMap, а затем myHashMap [x] .a = newValue

каков самый чистый способ сделать это? В Java у меня было бы:

    if(!myHashMap.containsKey("x"))
    {
        map.put("x",new ValueClass());
    }
    map.get("x").a=newValue;

Ответы [ 3 ]

4 голосов
/ 21 января 2020

Использование MutableMap # getOrPut

myMap.getOrPut("key") { "default_value" }
2 голосов
/ 21 января 2020

Другая альтернатива:

val foo = map["x"] ?: ValueClass().also { map["x"] = it }

foo.x = newValue
2 голосов
/ 21 января 2020

Вы можете использовать run() для создания значения, если оно не существует.

val foo = map["x"] ?: run {
    val bar = ValueClass()
    map["x"] = bar
    bar
}

foo.x = newValue

Это приведет к извлечению map.get("x") при его наличии, в противном случае будет оцениваться блок run. Блок создает ваш новый экземпляр, помещает его в карту и «возвращает» новый экземпляр.

Следовательно, foo всегда ненулевой, и вы можете обновить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...