Функция getOrPut

Функция getOrPut используется для получения значения по ключу из изменяемой коллекции. Если ключ отсутствует в коллекции, функция вычисляет новое значение с помощью лямбда-выражения, добавляет его в коллекцию и возвращает это вычисленное значение. Функция доступна только для изменяемых коллекций типа MutableMap.

Синтаксис

kotlininline fun <K, V> MutableMap<K, V>.getOrPut(
  key: K, 
  defaultValue: () -> V
): V

Параметры

key - ключ для поиска значения в коллекции.

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

Пример

Получим значение по ключу "apple" из изменяемого словаря:

kotlinval map = mutableMapOf<String, Int>(
  "banana" to 5,
  "orange" to 3
)

val res = map.getOrPut("apple") { 10 }
println(map)
println(res)

Результат выполнения кода:

kotlin{banana=5, orange=3, apple=10}
Int 10

Пример

Получим существующее значение по ключу "banana":

kotlinval map = mutableMapOf<String, Int>(
  "banana" to 5,
  "orange" to 3
)

val res = map.getOrPut("banana") { 10 }
println(map)
println(res)

Результат выполнения кода:

kotlin{banana=5, orange=3}
Int 5

Пример

Использование сложного вычисления значения по умолчанию:

kotlinval 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)

Результат выполнения кода:

kotlin{numbers=[2, 4, 6, 8, 10]}
List<Int> [2, 4, 6, 8, 10]

Для каких коллекций работает

Функция getOrPut работает только с изменяемыми словарями типа MutableMap. Она не доступна для:

Смотрите также

  • функцию getOrElse,
    которая возвращает значение по умолчанию без добавления в коллекцию
  • функцию getOrDefault,
    которая возвращает заданное значение по умолчанию
  • функцию getValue,
    которая возвращает значение или выбрасывает исключение
  • функцию put,
    которая добавляет или заменяет значение в словаре