Создание отображений и уплощение
associate и flatMap
«Создание отображений и уплощение» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.
Связывание и упрощение
Рассмотрим ещё два мощных инструмента для работы с коллекциями: функции семейства связывания создают карты из списка, а flatMap и flatten превращают вложенные коллекции в одну плоскую коллекцию.
Функция associateWith
associateWith использует каждый элемент как ключ и вычисляет его значение с помощью лямбда-функции, создавая Map.
fun main() {
val words = listOf("a", "bb", "ccc")
val lengths = words.associateWith { it.length }
println(lengths)
}Функция associateBy
associateBy работает наоборот: вычисляет ключ из каждого элемента, сохраняя сам элемент в качестве значения.
data class User(val id: Int, val name: String)
fun main() {
val users = listOf(User(1, "Ann"), User(2, "Bob"))
val byId = users.associateBy { it.id }
println(byId[2]?.name)
}Функция связывания
Общая операция связывания associate позволяет сразу создать и ключ, и значение, возвращая Pair для каждого элемента.
fun main() {
val names = listOf("Ann", "Bob", "Cy")
val map = names.associate { it to it.length }
println(map)
}Повторяющиеся ключи
Если два элемента создают один и тот же ключ в операции связывания, побеждает последний элемент. Если нужно сохранить каждый элемент, используйте уникальные ключи.
fun main() {
val words = listOf("apple", "ant", "bee")
val byFirst = words.associateBy { it.first() }
println(byFirst)
}Функция flatten
flatten принимает коллекцию коллекций и объединяет их в один плоский список.
fun main() {
val nested = listOf(listOf(1, 2), listOf(3, 4), listOf(5))
val flat = nested.flatten()
println(flat)
}Функция flatMap
flatMap преобразует каждый элемент в коллекцию, а затем упрощает все эти коллекции до одного списка. Это отображение и упрощение за один шаг.
fun main() {
val words = listOf("hi", "ok")
val chars = words.flatMap { it.toList() }
println(chars)
}flatMap для вложенных данных
flatMap идеально подходит для преобразования вложенных структур в одну последовательность элементов.
data class Team(val members: List<String>)
fun main() {
val teams = listOf(Team(listOf("Ann", "Bob")), Team(listOf("Cy")))
val everyone = teams.flatMap { it.members }
println(everyone)
}flatMap или отображение
Используйте отображение, когда каждый элемент создаёт ровно один результат. Используйте flatMap, когда каждый элемент создаёт коллекцию и нужно объединить их в один плоский список.
fun main() {
val numbers = listOf(1, 2, 3)
val mapped = numbers.map { listOf(it, it * 10) }
val flat = numbers.flatMap { listOf(it, it * 10) }
println("map: $mapped")
println("flatMap: $flat")
}Сочетание связывания и flatMap
Эти инструменты часто используются вместе в цепочках обработки данных: сначала упрощают вложенные данные, а затем связывают их в карту для быстрого поиска.
data class Order(val items: List<String>)
fun main() {
val orders = listOf(Order(listOf("pen", "ink")), Order(listOf("pen")))
val counts = orders.flatMap { it.items }.groupingBy { it }.eachCount()
println(counts)
}Когда что использовать
Выбирайте associateBy и associateWith, чтобы создавать быстрые карты для поиска из списков, а flatMap и flatten — чтобы упрощать вложенные коллекции. Они делают работу со структурированными данными краткой и понятной.
Быстрая проверка
Что делает flatMap?
Итоги
Вы научились создавать карты с помощью связывания, associateBy и associateWith — при повторяющемся ключе побеждает последний элемент, — а также устранять вложенность с помощью flatten и flatMap. Эти функции дополняют Ваш набор инструментов для преобразования, организации, агрегирования и реструктуризации данных.
Изучай Kotlin с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 51
- Уроки
- 203
Часто задаваемые вопросы
Урок «Создание отображений и уплощение» бесплатный?
Да — полный текст урока «Создание отображений и уплощение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.
Чему я научусь в уроке «Создание отображений и уплощение»?
associate и flatMap Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Kotlin Academy?
Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Создание отображений и уплощение»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Kotlin Academy?
Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Фильтрация и отображение
- Группировка и разбиение
- Агрегация
- Создание отображений и уплощение