0Pricing
Kotlin Academy · Урок

Классы данных в коллекциях

Используйте их в отображениях и множествах

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

Классы данных и коллекции

Поскольку классы данных имеют основанные на значениях equals и hashCode, они отлично работают внутри коллекций.

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

Классы данных в списке

Храните объекты данных в списке и перебирайте их, как любые другие элементы.

Благодаря понятному toString их легко выводить.

data class User(val name: String, val age: Int)

fun main() {
    val users = listOf(User("Alice", 30), User("Bob", 25))
    for (u in users) println(u)
}

contains работает по значению

Поскольку equals сравнивает значения, contains находит равный объект, даже если это другой экземпляр.

Вам не нужна в точности та же ссылка.

data class User(val name: String, val age: Int)

fun main() {
    val users = listOf(User("Alice", 30))
    println(users.contains(User("Alice", 30)))
}

Удаление дубликатов с помощью множества

Множества отклоняют дубликаты, используя equals и hashCode.

Два объекта данных с одинаковыми значениями считаются одним и тем же элементом.

data class Point(val x: Int, val y: Int)

fun main() {
    val set = setOf(Point(1, 1), Point(1, 1), Point(2, 2))
    println(set.size)
}

Классы данных как ключи отображения

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

Вы можете создать объект-ключ на лету и всё равно найти сохранённое значение.

data class Coord(val x: Int, val y: Int)

fun main() {
    val grid = mapOf(Coord(0, 0) to "start", Coord(1, 1) to "goal")
    println(grid[Coord(1, 1)])
}

Классы данных как значения отображения

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

Это распространённая структура для поиска в памяти.

data class User(val name: String, val age: Int)

fun main() {
    val byId = mapOf(1 to User("Alice", 30))
    println(byId[1]?.name)
}

Фильтрация коллекций

Объединяйте классы данных с функциями коллекций, например filter, чтобы выполнять запросы к данным.

Лямбда получает прямой доступ к свойствам.

data class User(val name: String, val age: Int)

fun main() {
    val users = listOf(User("A", 20), User("B", 40))
    val adults = users.filter { it.age >= 30 }
    println(adults)
}

Преобразование в свойства

Используйте map, чтобы преобразовать коллекцию объектов в коллекцию одного свойства.

Так Вы извлекаете только нужные данные.

data class User(val name: String, val age: Int)

fun main() {
    val users = listOf(User("Alice", 30), User("Bob", 25))
    val names = users.map { it.name }
    println(names)
}

Группировка по свойству

groupBy превращает список в отображение, ключами которого служит выбранное свойство.

Здесь пользователи сгруппированы по своему городу.

data class User(val name: String, val city: String)

fun main() {
    val users = listOf(User("A", "Paris"), User("B", "Paris"), User("C", "Rome"))
    val byCity = users.groupBy { it.city }
    println(byCity["Paris"]?.size)
}

Иммутабельное обновление элементов

Чтобы обновить элемент в неизменяемом списке, примените к нему map и вызовите copy для подходящего элемента.

В результате получится новый список с одним изменённым объектом.

data class User(val name: String, val age: Int)

fun main() {
    val users = listOf(User("Alice", 30), User("Bob", 25))
    val updated = users.map { if (it.name == "Bob") it.copy(age = 26) else it }
    println(updated)
}

Соберём всё вместе

Классы данных идеально подходят для элементов коллекций:

  • contains и множества работают по значению
  • Они образуют безопасные ключи отображений, которые можно сравнивать
  • Они естественно сочетаются с filter, map и groupBy
  • copy позволяет выполнять неизменяемые обновления
data class User(val name: String, val age: Int)

fun main() {
    val users = setOf(User("Alice", 30), User("Alice", 30))
    println(users.size)
    println(users.map { it.name })
}

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

Проверьте, насколько хорошо Вы поняли работу классов данных в коллекциях.

Итоги

Вы изучили работу классов данных в коллекциях:

  • Равенство значений лежит в основе работы contains, множеств и ключей отображений
  • Они сочетаются с filter, map и groupBy
  • copy поддерживает неизменяемые обновления

На этом курс «Классы данных и деструктуризация» завершён.

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

Урок «Классы данных в коллекциях» бесплатный?

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

Чему я научусь в уроке «Классы данных в коллекциях»?

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

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

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

Сколько времени занимает урок «Классы данных в коллекциях»?

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

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

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

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

  1. Объявление классов данных
  2. copy и equals
  3. Деструктурирующие объявления
  4. Классы данных в коллекциях
← Назад к Kotlin Academy