map i flatMap: przekształcanie każdego elementu
Przekształcaj kolekcje za pomocą map i spłaszczaj zagnieżdżone wyniki przy użyciu flatMap.
map i flatMap: przekształcanie każdego elementu to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 1 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.
Podstawy transformacji
map stosuje funkcję do każdego elementu i zwraca nową kolekcję o takim samym rozmiarze. flatMap działa podobnie, ale spłaszcza listy list do jednej listy.
Podstawowe map
Przekształca każdy element za pomocą lambdy; wynik ma taki sam rozmiar jak dane wejściowe.
fun main() {
val nums = listOf(1, 2, 3, 4)
val squares = nums.map { it * it }
println(squares) // [1, 4, 9, 16]
}map zmienia typ
Typ elementów wynikowych może różnić się od typu elementów wejściowych — List<Int> może stać się List<String>.
fun main() {
val nums = listOf(1, 2, 3)
val labels = nums.map { "Item $it" }
println(labels)
}map na klasie danych
Wyodrębnia właściwość z każdego elementu — przekształca klasy danych w prostsze typy.
data class User(val name: String, val age: Int)
fun main() {
val users = listOf(User("Ada", 35), User("Ben", 22))
val names = users.map { it.name }
println(names) // [Ada, Ben]
}Łączenie wywołań map
Wiele wywołań map można płynnie łączyć — każde przekształca wynik poprzedniego.
fun main() {
val nums = listOf(1, 2, 3)
val result = nums.map { it + 1 }.map { it * 10 }
println(result) // [20, 30, 40]
}Podstawowe flatMap
flatMap wywołuje funkcję zwracającą listę dla każdego elementu, a następnie spłaszcza wszystkie wyniki do jednej listy.
fun main() {
val words = listOf("hello", "world")
val chars = words.flatMap { it.toList() }
println(chars) // [h, e, l, l, o, w, o, r, l, d]
}Kiedy używać flatMap
Należy używać flatMap, gdy lambda w naturalny sposób tworzy listę, a potrzebny jest jeden płaski wynik zamiast listy list.
data class Order(val items: List<String>)
fun main() {
val orders = listOf(
Order(listOf("pen", "book")),
Order(listOf("lamp")),
Order(listOf("mug", "ring"))
)
val allItems = orders.flatMap { it.items }
println(allItems) // [pen, book, lamp, mug, ring]
}map listy a flatMap
Należy porównać typy wyników — map zachowuje zagnieżdżenie, a flatMap je usuwa.
fun main() {
val nums = listOf(1, 2, 3)
val mapped = nums.map { listOf(it, it * 10) }
val flat = nums.flatMap { listOf(it, it * 10) }
println(mapped) // [[1, 10], [2, 20], [3, 30]]
println(flat) // [1, 10, 2, 20, 3, 30]
}flatMap z listami warunkowymi
Dla elementów, które mają zostać pominięte, należy zwracać puste listy — flatMap filtruje i przekształca w jednym kroku.
fun main() {
val nums = listOf(1, 2, 3, 4, 5)
val doubled = nums.flatMap { if (it % 2 == 0) listOf(it, it * 2) else emptyList() }
println(doubled) // [2, 4, 4, 8]
}map z indeksem
mapIndexed przekazuje lambdzie zarówno indeks, jak i wartość.
fun main() {
val fruits = listOf("apple", "banana", "cherry")
val labeled = fruits.mapIndexed { i, name -> "$i: $name" }
println(labeled)
}Sequence a List
W bardzo długich łańcuchach należy najpierw przekonwertować kolekcję na Sequence, aby uniknąć tworzenia list pośrednich.
fun main() {
val big = (1..100).asSequence()
.map { it + 1 }
.filter { it % 5 == 0 }
.map { it * 2 }
.toList()
println(big.take(5)) // first 5 results
}Szybkie sprawdzenie
Jaka jest kluczowa różnica między map a flatMap?
Podsumowanie
map przekształca każdy element (zachowuje rozmiar, ale może zmienić typ). flatMap stosuje funkcję zwracającą listę, a następnie łączy wszystkie wyniki. Indeksy można uzyskać za pomocą mapIndexed, a w przypadku długich leniwych potoków warto przełączyć się na Sequence.
Często zadawane pytania
Czy lekcja „map i flatMap: przekształcanie każdego elementu” jest bezpłatna?
Tak — pełny tekst „map i flatMap: przekształcanie każdego elementu” 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 „map i flatMap: przekształcanie każdego elementu”?
Przekształcaj kolekcje za pomocą map i spłaszczaj zagnieżdżone wyniki przy użyciu flatMap. Ć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 1 z 4.
Ile czasu zajmuje lekcja „map i flatMap: przekształcanie każdego elementu”?
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
- map i flatMap: przekształcanie każdego elementu
- filter, filterNot i partition
- fold, reduce i runningFold
- Łańcuchy potoków i unikanie list pośrednich za pomocą Sequence