Функция associateBy
Функция associateBy преобразует коллекцию в отображение Map,
где ключи формируются из элементов исходной коллекции с помощью функции keySelector,
а значениями становятся сами элементы коллекции. Если встречаются дубликаты ключей,
сохраняется только последнее значение.
Импорт
import kotlin.collections.associateBy
Синтаксис
// Для Iterable, Array, List, Set
inline fun <T, K> Iterable<T>.associateBy(
keySelector: (T) -> K
): Map<K, T>
// Для Map
inline fun <K, V, R> Map<out K, V>.associateBy(
keySelector: (Entry<K, V>) -> R
): Map<R, Entry<K, V>>
Пример
Создадим отображение из списка строк, где ключом будет первый символ каждой строки:
val list = listOf("apple", "banana", "cherry", "date")
val res = list.associateBy { it.first() }
println(res)
Результат выполнения кода:
Map {a=apple, b=banana, c=cherry, d=date}
Пример
Создадим отображение из массива чисел, где ключом будет остаток от деления на 3:
val array = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
val res = array.associateBy { it % 3 }
println(res)
Результат выполнения кода:
Map {1=7, 2=8, 0=9}
Пример
Работа с множеством Set. Создадим отображение, где ключ - длина строки:
val set = setOf("one", "two", "three", "four", "five")
val res = set.associateBy { it.length }
println(res)
Результат выполнения кода:
Map {3=five, 5=three, 4=four}
Пример
Преобразование Map с использованием associateBy.
Создадим новое отображение, где ключом будет значение, умноженное на 2:
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
val res = map.associateBy { it.value * 2 }
println(res)
Результат выполнения кода:
Map {2=(a=1), 4=(b=2), 6=(c=3)}
Для каких коллекций работает
Функция associateBy доступна для следующих типов коллекций:
Array- массивыList- спискиSet- множестваMap- отображенияIterable- любые итерируемые коллекции
Смотрите также
-
функцию
associate,
которая создает отображение с произвольными ключами и значениями -
функцию
associateWith,
которая использует элементы как ключи, а значения формирует функцией -
функцию
groupBy,
которая группирует элементы по ключу в списки -
функцию
toMap,
которая преобразует коллекцию пар в отображение