Agregacja
sum, count, fold, reduce
Agregacja to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 3 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.
Agregowanie kolekcji
Agregacja redukuje kolekcję do jednej wartości. Kotlin udostępnia gotowe funkcje, takie jak sum, count, average, max, a także uniwersalne funkcje fold i reduce.
sum i average
sum sumuje elementy liczbowe, a average zwraca ich średnią jako wartość typu Double.
fun main() {
val numbers = listOf(2, 4, 6, 8)
println("Sum: ${numbers.sum()}")
println("Average: ${numbers.average()}")
}count
count zwraca liczbę elementów, opcjonalnie przefiltrowanych za pomocą predykatu.
fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6)
println("Total: ${numbers.count()}")
println("Even count: ${numbers.count { it % 2 == 0 }}")
}maxOrNull i minOrNull
Aby bezpiecznie znaleźć wartości skrajne, należy użyć maxOrNull i minOrNull, które zwracają null dla pustych kolekcji.
fun main() {
val numbers = listOf(3, 7, 2, 9, 4)
println("Max: ${numbers.maxOrNull()}")
println("Min: ${numbers.minOrNull()}")
}sumOf i maxByOrNull
sumOf sumuje wybraną wartość dla każdego elementu, a maxByOrNull znajduje element o największej wybranej wartości.
data class Item(val name: String, val price: Int)
fun main() {
val items = listOf(Item("a", 10), Item("b", 30), Item("c", 20))
println("Total price: ${items.sumOf { it.price }}")
println("Most expensive: ${items.maxByOrNull { it.price }?.name}")
}Funkcja fold
fold łączy elementy w jeden wynik, zaczynając od wartości początkowej. Lambda otrzymuje bieżący akumulator oraz aktualny element.
fun main() {
val numbers = listOf(1, 2, 3, 4)
val total = numbers.fold(100) { acc, n -> acc + n }
println(total)
}fold może zmieniać typ
Ponieważ podają Państwo wartość początkową, fold może tworzyć wynik dowolnego typu, na przykład String.
fun main() {
val words = listOf("Kotlin", "is", "fun")
val sentence = words.fold("") { acc, w -> if (acc.isEmpty()) w else "$acc $w" }
println(sentence)
}Funkcja reduce
reduce działa podobnie jak fold, ale używa pierwszego elementu jako początkowego akumulatora. Zgłasza wyjątek, jeśli kolekcja jest pusta, i nie może zmienić typu.
fun main() {
val numbers = listOf(1, 2, 3, 4)
val product = numbers.reduce { acc, n -> acc * n }
println(product)
}fold a reduce
Najważniejsze różnice:
foldprzyjmuje wartość początkową, działa na pustych kolekcjach i może zwracać inny typ.reducerozpoczyna od pierwszego elementu, nie działa na pustych kolekcjach i zachowuje typ elementów.
fun main() {
val empty = emptyList<Int>()
println(empty.fold(0) { acc, n -> acc + n })
println("fold is safe on empty lists")
}runningFold i runningReduce
Jeśli potrzebują Państwo każdego pośredniego akumulatora, runningFold (oraz runningReduce) zwraca listę częściowych wyników.
fun main() {
val numbers = listOf(1, 2, 3, 4)
val sums = numbers.runningFold(0) { acc, n -> acc + n }
println(sums)
}Wybór funkcji agregującej
Należy używać wyspecjalizowanych funkcji (sum, count, average, maxOrNull), gdy odpowiadają one potrzebom. W przypadku niestandardowego łączenia wartości należy sięgnąć po fold lub reduce, przy czym fold jest lepszym wyborem, gdy potrzebna jest wartość początkowa lub zmiana typu.
Szybkie sprawdzenie
Jaka jest główna różnica między fold a reduce?
Podsumowanie
Nauczyli się Państwo agregować dane za pomocą sum, count, average, maxOrNull i sumOf, a także korzystać z uniwersalnych funkcji fold (wartość początkowa, dowolny typ, bezpieczne działanie dla pustych kolekcji) i reduce (pierwszy element jako wartość początkowa). Następnie utworzą Państwo mapy i spłaszczą zagnieżdżone kolekcje.
Często zadawane pytania
Czy lekcja „Agregacja” jest bezpłatna?
Tak — pełny tekst „Agregacja” 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 „Agregacja”?
sum, count, fold, reduce Ć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 3 z 4.
Ile czasu zajmuje lekcja „Agregacja”?
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.