Kotlin Academy · Урок

Группировка и разбиение

Организуйте данные

Урок 2 из 413 шагов

«Группировка и разбиение» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.

Организация данных

Иногда коллекцию нужно разделить на категории. Kotlin предоставляет groupBy для распределения элементов по ключу и операцию разделения для разбиения на два списка по условию.

Функция разделения

Операция разделения разбивает коллекцию на пару из двух списков: элементы, соответствующие условию, и элементы, которые ему не соответствуют.

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5, 6)
    val (even, odd) = numbers.partition { it % 2 == 0 }
    println("Even: $even")
    println("Odd: $odd")
}

Деструктуризация пары

Поскольку операция разделения возвращает Pair, Вы можете сразу разобрать её на две именованные переменные, как показано выше. Также можно обратиться к .first и .second.

fun main() {
    val result = listOf(10, -5, 3, -8).partition { it >= 0 }
    println(result.first)
    println(result.second)
}

Функция groupBy

groupBy создаёт Map, где каждый ключ формируется селектором, а значением является список элементов с этим ключом.

fun main() {
    val words = listOf("apple", "banana", "avocado", "cherry")
    val byFirstLetter = words.groupBy { it.first() }
    println(byFirstLetter)
}

Группировка по вычисляемому ключу

Ключом может быть любое вычисляемое значение, например длина строки или остаток от деления.

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5, 6, 7)
    val byRemainder = numbers.groupBy { it % 3 }
    println(byRemainder)
}

groupBy с преобразованием значений

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

fun main() {
    val words = listOf("red", "rose", "blue", "berry")
    val grouped = groupExample(words)
    println(grouped)
}

fun groupExample(words: List<String>) =
    words.groupBy({ it.first() }, { it.uppercase() })

Перебор групп

Поскольку groupBy возвращает Map, Вы можете перебирать записи, обрабатывая каждую группу.

fun main() {
    val animals = listOf("cat", "cow", "dog", "duck")
    val groups = animals.groupBy { it.first() }
    for ((letter, list) in groups) {
        println("$letter -> $list")
    }
}

Подсчёт с группировкой

Для подсчёта элементов по ключам эффективно использовать groupingBy вместе с eachCount; такой код легко читается.

fun main() {
    val letters = listOf("a", "b", "a", "c", "b", "a")
    val counts = letters.groupingBy { it }.eachCount()
    println(counts)
}

Разделение или фильтрация

Если Вам нужны только соответствующие элементы, используйте filter. Если нужны и соответствующие, и несоответствующие элементы, операция разделения выполнит это за один проход и вернёт оба списка.

fun main() {
    val ages = listOf(15, 22, 17, 30, 12)
    val (adults, minors) = ages.partition { it >= 18 }
    println("Adults: $adults, Minors: $minors")
}

Выбор между groupBy и разделением

Используйте операцию разделения для ровно двух групп, определяемых условием «да или нет». Используйте groupBy, когда групп может быть много и они определяются некоторым свойством.

Практическая группировка

Группировка и разделение заменяют подробные ручные циклы картами и списками. Они ясно выражают намерение и уменьшают количество ошибок при ручном учёте данных.

Быстрая проверка

Что возвращает операция разделения?

Итоги

Вы научились использовать операцию разделения для разбиения по условию на два списка и groupBy для распределения элементов по ключу в карте, а также groupingBy().eachCount() для подсчёта. Далее Вы научитесь сводить коллекции к отдельным значениям с помощью агрегирования.

Можно начать бесплатно

Изучай Kotlin с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
51
Уроки
203

Часто задаваемые вопросы

Урок «Группировка и разбиение» бесплатный?

Да — полный текст урока «Группировка и разбиение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.

Чему я научусь в уроке «Группировка и разбиение»?

Организуйте данные Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kotlin Academy?

Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Группировка и разбиение»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kotlin Academy?

Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Фильтрация и отображение
  2. Группировка и разбиение
  3. Агрегация
  4. Создание отображений и уплощение
← Назад к Kotlin Academy