get Or Put If Null
Требования к платформе и версии: Common (2.4)
inline fun <K, V> MutableMap<K, V>.getOrPutIfNull(key: K, crossinline defaultValue: () -> V): V
Возвращает значение для указанного ключа, если значение присутствует и не является null. В противном случае вызывает функцию defaultValue, помещает её результат в map под указанным ключом и возвращает результат вызова.
В отличие от getOrPutIfMissing, эта функция помещает и возвращает результат функции defaultValue, если для ключа сопоставлено значение null.
Если указанный ключ отсутствует в этой map или ему сопоставлено значение null, результат defaultValue, даже если это null, помещается в map под этим ключом. Если defaultValue выбрасывает исключение, оно выбрасывается повторно.
Обратите внимание, что атомарность операции не гарантируется, если map изменяется одновременно несколькими потоками.
Выбрасываемые исключения
если указанный ключ или результат defaultValue равен null, а эта map не поддерживает null ключи или значения.
Примеры
import kotlin.test.*
import java.util.*
fun main() {
//sampleStart
val map = mutableMapOf<String, Int?>()
println(map.getOrPutIfNull("x") { 2 }) // 2
// subsequent calls to getOrPutIfNull do not evaluate the default value
// since the first getOrPutIfNull has already stored value 2 in the map
println(map.getOrPutIfNull("x") { 3 }) // 2
// however, null value mapped to a key is treated the same as the missing value
println(map.getOrPutIfNull("y") { null }) // null
// so in that case the default value is evaluated
println(map.getOrPutIfNull("y") { 42 }) // 42
//sampleEnd
}
Требования к платформе и версии: JVM (2.4)
inline fun <K, V> ConcurrentMap<K, V>.getOrPutIfNull(key: K, crossinline defaultValue: () -> V): V
Возвращает значение для указанного ключа, если значение присутствует и не является null. В противном случае вызывает функцию defaultValue, помещает её результат в map под указанным ключом и возвращает результат вызова.
В отличие от getOrPutIfMissing, эта функция помещает и возвращает результат функции defaultValue, если для ключа сопоставлено значение null.
Если указанный ключ отсутствует в этой map или ему сопоставлено значение null, результат defaultValue, даже если это null, помещается в map под этим ключом. Если defaultValue выбрасывает исключение, оно выбрасывается повторно.
Эта функция гарантирует, что новое значение не будет помещено в map, если ключ уже связан с ненулевым значением. Однако функция defaultValue всё же может быть вызвана.
Эта функция использует ConcurrentMap.computeIfAbsent. Поэтому реализации ConcurrentMap, поддерживающие значения null, должны переопределять реализацию computeIfAbsent по умолчанию, чтобы результат mappingFunction помещался в map как при отсутствии существующего значения для ключа, так и когда ключ связан со значением null.
Выбрасываемые исключения
если указанный ключ или результат defaultValue равен null, а эта конкурентная map не поддерживает null ключи или значения.
Примеры
import kotlin.test.*
import java.util.*
fun main() {
//sampleStart
val map = mutableMapOf<String, Int?>()
println(map.getOrPutIfNull("x") { 2 }) // 2
// subsequent calls to getOrPutIfNull do not evaluate the default value
// since the first getOrPutIfNull has already stored value 2 in the map
println(map.getOrPutIfNull("x") { 3 }) // 2
// however, null value mapped to a key is treated the same as the missing value
println(map.getOrPutIfNull("y") { null }) // null
// so in that case the default value is evaluated
println(map.getOrPutIfNull("y") { 42 }) // 42
//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-null.html