НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
418 of 1310 menu

Функция groupBy

Функция groupBy группирует элементы коллекции по ключу, который вычисляется с помощью переданной ключевой функции. Результатом является словарь Map, где ключи - это результаты ключевой функции, а значения - списки элементов, соответствующих каждому ключу. Работает с массивами Array, списками List, множествами Set и другими типами коллекций.

Синтаксис

inline fun <T, K> Array<out T>.groupBy( keySelector: (T) -> K ): Map<K, List<T>>
inline fun <T, K> Iterable<T>.groupBy( keySelector: (T) -> K ): Map<K, List<T>>
inline fun <K> CharSequence.groupBy( keySelector: (Char) -> K ): Map<K, List<Char>>

Пример

Сгруппируем числа по их четности:

val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) val res = numbers.groupBy { it % 2 == 0 } println(res)

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

Map<Boolean, List<Int>> {false=[1, 3, 5, 7, 9], true=[2, 4, 6, 8, 10]}

Пример

Сгруппируем символы строки по их регистру:

val text = "HelloWorld" val res = text.groupBy { it.isUpperCase() } println(res)

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

Map<Boolean, List<Char>> {false=[e, l, l, o, o, r, l, d], true=[H, W]}

Пример

Сгруппируем элементы массива по их длине:

val words = arrayOf("apple", "banana", "cherry", "date", "fig") val res = words.groupBy { it.length } println(res)

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

Map<Int, List<String>> {5=[apple], 6=[banana, cherry], 4=[date], 3=[fig]}

Синтаксис с преобразованием значений

inline fun <T, K, V> Array<out T>.groupBy( keySelector: (T) -> K, valueTransform: (T) -> V ): Map<K, List<V>>
inline fun <T, K, V> Iterable<T>.groupBy( keySelector: (T) -> K, valueTransform: (T) -> V ): Map<K, List<V>>

Пример

Сгруппируем слова по первой букве, преобразовав значения в верхний регистр:

val words = listOf("apple", "banana", "cherry", "date", "fig") val res = words.groupBy( keySelector = { it.first() }, valueTransform = { it.uppercase() } ) println(res)

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

Map<Char, List<String>> {a=[APPLE], b=[BANANA], c=[CHERRY], d=[DATE], f=[FIG]}

Синтаксис с целевой Map

inline fun <T, K, V, M : MutableMap<in K, MutableList<V>>> Array<out T>.groupByTo( destination: M, keySelector: (T) -> K, valueTransform: (T) -> V ): M
inline fun <T, K, M : MutableMap<in K, MutableList<T>>> Array<out T>.groupByTo( destination: M, keySelector: (T) -> K ): M

Пример

Группировка с использованием существующей Map:

val numbers = listOf(1, 2, 3, 4, 5, 6) val destinationMap = mutableMapOf<String, MutableList<Int>>() val res = numbers.groupByTo(destinationMap) { if (it % 2 == 0) "even" else "odd" } println(res)

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

Map<String, MutableList<Int>> {odd=[1, 3, 5], even=[2, 4, 6]}

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

  • функцию associateBy,
    которая создает Map с ключами из результатов ключевой функции
  • функцию partition,
    которая разделяет коллекцию на две части по условию
  • функцию filter,
    которая фильтрует элементы коллекции по условию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить