Группировка и разбиение
Организуйте данные
«Группировка и разбиение» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Фильтрация и отображение
- Группировка и разбиение
- Агрегация
- Создание отображений и уплощение