Статья о встроенных функциях группировки в языке Kotlin.
РЕКОМЕНДУЕМ:
Группировка данных в Kotlin
В Kotlin есть функция‑расширение groupBy(), которую можно применить к коллекциям. Работает она так:
Как видно, функция разбивает List на Map, где в качестве ключей используются значения, полученные при выполнении указанной в аргументе groupBy() лямбды, а в качестве значений — список значений, входящих в эту группу. В данном случае тело лямбды — it.first(), поэтому группировка происходит по первому символу.
Интересно, что groupBy() принимает и второй аргумент. В нем можно передать функцию трансформации, которая будет выполнена над значениями коллекции.
Еще одна функция группировки — это groupingBy(). В отличие от предыдущей, она предназначена не для группировки как таковой, а для выполнения над сгруппированными данными какой‑либо общей операции. Допустим, мы хотим посчитать количество слов на каждую букву в коллекции. Мы могли бы сделать это в цикле, но можно обойтись всего одной строкой.
Обрати внимание, что функция возвращает не Map или List, а объект Grouping, над которым мы как раз и выполняем операцию eachCount() — подсчет общего количества элементов в каждой группе. Также Grouping поддерживает операции fold(), reduce() и aggregate(), о которых можно прочитать в официальной документации.
Более сложный пример, использующий обе функции: подсчет количества законченных и незаконченных задач.
Оригинальная статья Kotlin Grouping