Spec-Zone.ru › Kotlin 2

getOrPutIfMissing

kotlin-stdlib/kotlin.collections/getOrPutIfMissing

Требования к платформе и версии: Common (2.4)

@ExperimentalStdlibApi
inline fun <K, V> MutableMap<K, V>.getOrPutIfMissing(key: K, crossinline defaultValue: () -> V): V

Возвращает значение для заданного ключа, если оно присутствует. В противном случае вызывает функцию defaultValue, помещает её результат в карту под заданным ключом и возвращает результат вызова.

В отличие от getOrPutIfNull, эта функция возвращает сопоставленное значение, даже если оно равно null.

Если заданного ключа нет в этой карте, результат defaultValue, даже если он равен null, помещается в карту под этим ключом. Если defaultValue выбрасывает исключение, оно выбрасывается повторно.

Обратите внимание, что атомарность операции не гарантируется, если карта изменяется одновременно.

Исключения

NullPointerException

если указанный ключ или результат defaultValue равен null, а эта карта не поддерживает null ключи или значения.

Примеры

import kotlin.test.*
import java.util.*

fun main() { 
   //sampleStart 
   val map = mutableMapOf<String, Int?>()

println(map.getOrPutIfMissing("x") { 2 }) // 2
// subsequent calls to getOrPutIfMissing do not evaluate the default value
// since the first getOrPutIfMissing has already stored value 2 in the map
println(map.getOrPutIfMissing("x") { 3 }) // 2

map["x"] = null
// if a key is mapped to null value, getOrPutIfMissing does not overwrite it
println(map.getOrPutIfMissing("x") { 4 }) // null 
   //sampleEnd
}

Требования к платформе и версии: JVM (2.4)

@ExperimentalStdlibApi
inline fun <K, V> ConcurrentMap<K, V>.getOrPutIfMissing(key: K, crossinline defaultValue: () -> V): V

Возвращает значение для заданного ключа, если оно присутствует. В противном случае вызывает функцию defaultValue, помещает её результат в карту под заданным ключом и возвращает результат вызова.

В отличие от getOrPutIfNull, эта функция возвращает сопоставленное значение, даже если оно равно null.

Если заданного ключа нет в этой карте, результат defaultValue, даже если он равен null, помещается в карту под этим ключом. Если defaultValue выбрасывает исключение, оно выбрасывается повторно.

Эта функция гарантирует, что новое значение не будет помещено в карту, если ключ уже сопоставлен со значением. Однако функция defaultValue всё равно может быть вызвана.

Исключения

NullPointerException

если указанный ключ или результат defaultValue равен null, а эта конкурентная карта не поддерживает null ключи или значения.

Примеры

import kotlin.test.*
import java.util.*

fun main() { 
   //sampleStart 
   val map = mutableMapOf<String, Int?>()

println(map.getOrPutIfMissing("x") { 2 }) // 2
// subsequent calls to getOrPutIfMissing do not evaluate the default value
// since the first getOrPutIfMissing has already stored value 2 in the map
println(map.getOrPutIfMissing("x") { 3 }) // 2

map["x"] = null
// if a key is mapped to null value, getOrPutIfMissing does not overwrite it
println(map.getOrPutIfMissing("x") { 4 }) // null 
   //sampleEnd
}

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/get-or-put-if-missing.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API