Kotlin Academy · Lekcja

Data class w kolekcjach

Używaj ich w mapach i zbiorach

Lekcja 4 z 413 kroki

Data class w kolekcjach to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Klasy danych w kolekcjach

Ponieważ klasy danych mają oparte na wartościach funkcje equals i hashCode, doskonale sprawdzają się w kolekcjach.

W tej lekcji pokazano działanie klas danych na listach, zbiorach i mapach.

Klasy danych na liście

Obiekty danych można przechowywać na liście i iterować po nich tak jak po dowolnych innych elementach.

Ich czytelna funkcja toString ułatwia wyświetlanie.

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 działa na podstawie wartości

Ponieważ equals porównuje wartości, contains znajdzie równoważny obiekt, nawet jeśli jest on inną instancją.

Nie jest potrzebna dokładnie ta sama referencja.

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

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

Usuwanie duplikatów za pomocą zbioru

Zbiory odrzucają duplikaty za pomocą equals i hashCode.

Dwa obiekty danych o identycznych wartościach są traktowane jako ten sam element.

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)
}

Klasy danych jako klucze mapy

Klasa danych świetnie sprawdza się jako klucz mapy, ponieważ wyszukiwanie opiera się na równości wartości.

Klucz można utworzyć w locie i mimo to odnaleźć zapisaną wartość.

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)])
}

Klasy danych jako wartości mapy

Oczywiście klasy danych mogą być również wartościami, modelując bogate rekordy indeksowane identyfikatorem.

Jest to częsty sposób organizowania danych przechowywanych w pamięci.

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

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

Filtrowanie kolekcji

Połącz klasy danych z funkcjami kolekcji, takimi jak filter, aby wyszukiwać dane.

Lambda uzyskuje bezpośredni dostęp do właściwości.

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)
}

Mapowanie na właściwości

Użyj map, aby przekształcić kolekcję obiektów w kolekcję zawierającą jedną właściwość.

W ten sposób wyodrębnisz tylko potrzebne dane.

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)
}

Grupowanie według właściwości

groupBy przekształca listę w mapę, której kluczami są wartości wybranej właściwości.

W tym przypadku użytkownicy są grupowani według miasta.

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)
}

Niemutowalna aktualizacja elementów

Aby zaktualizować element na niemutowalnej liście, należy wykonać na niej map i użyć copy dla dopasowanego elementu.

Wynikiem jest nowa lista z jednym zmienionym obiektem.

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)
}

Połączenie wszystkiego

Klasy danych są idealnymi elementami kolekcji:

  • contains i zbiory działają na podstawie wartości
  • Tworzą bezpieczne, porównywalne klucze map
  • Naturalnie współpracują z funkcjami filter, map i groupBy
  • copy umożliwia niemutowalne aktualizacje
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 })
}

Szybki test

Sprawdź swoje rozumienie klas danych w kolekcjach.

Podsumowanie

Dowiedziałeś się, jak klasy danych działają w kolekcjach:

  • Równość wartości zasila działanie contains, zbiorów i kluczy map
  • Łączą się z funkcjami filter, map i groupBy
  • copy obsługuje niemutowalne aktualizacje

Na tym kończy się kurs Klasy danych i destrukturyzacja.

Bezpłatny start

Ucz się Kotlin dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
51
Lekcje
203

Często zadawane pytania

Czy lekcja „Data class w kolekcjach” jest bezpłatna?

Tak — pełny tekst „Data class w kolekcjach” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Data class w kolekcjach”?

Używaj ich w mapach i zbiorach Ćwiczysz Kotlin Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Kotlin Academy?

Nie wymagamy żadnego doświadczenia. Kotlin Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Data class w kolekcjach”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Kotlin Academy?

Tak. Każda lekcja Kotlin Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Deklarowanie data class
  2. copy i equals
  3. Deklaracje destrukturyzujące
  4. Data class w kolekcjach
← Powrót do Kotlin Academy