Kotlin Academy · Урок

Создание отображений и уплощение

associate и flatMap

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

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

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

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