Функция getOrPut
Функция getOrPut используется для получения значения по ключу из изменяемой коллекции.
Если ключ отсутствует в коллекции, функция вычисляет новое значение с помощью лямбда-выражения,
добавляет его в коллекцию и возвращает это вычисленное значение.
Функция доступна только для изменяемых коллекций типа MutableMap.
Синтаксис
inline fun <K, V> MutableMap<K, V>.getOrPut(
key: K,
defaultValue: () -> V
): V
Параметры
key - ключ для поиска значения в коллекции.
defaultValue - лямбда-функция, которая вычисляет и возвращает значение по умолчанию,
если ключ отсутствует в коллекции.
Пример
Получим значение по ключу "apple" из изменяемого словаря:
val map = mutableMapOf<String, Int>(
"banana" to 5,
"orange" to 3
)
val res = map.getOrPut("apple") { 10 }
println(map)
println(res)
Результат выполнения кода:
{banana=5, orange=3, apple=10}
Int 10
Пример
Получим существующее значение по ключу "banana":
val map = mutableMapOf<String, Int>(
"banana" to 5,
"orange" to 3
)
val res = map.getOrPut("banana") { 10 }
println(map)
println(res)
Результат выполнения кода:
{banana=5, orange=3}
Int 5
Пример
Использование сложного вычисления значения по умолчанию:
val map = mutableMapOf<String, List<Int>>()
val res = map.getOrPut("numbers") {
val list = mutableListOf<Int>()
for (i in 1..5) {
list.add(i * 2)
}
list
}
println(map)
println(res)
Результат выполнения кода:
{numbers=[2, 4, 6, 8, 10]}
List<Int> [2, 4, 6, 8, 10]
Для каких коллекций работает
Функция getOrPut работает только с изменяемыми словарями типа MutableMap.
Она не доступна для:
Array- массивыListиMutableList- спискиSetиMutableSet- множества- Неизменяемых коллекций
Map
Смотрите также
-
функцию
getOrElse,
которая возвращает значение по умолчанию без добавления в коллекцию -
функцию
getOrDefault,
которая возвращает заданное значение по умолчанию -
функцию
getValue,
которая возвращает значение или выбрасывает исключение -
функцию
put,
которая добавляет или заменяет значение в словаре