0Pricing
Kotlin Academy · Lekcja

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:

  • fold przyjmuje wartość początkową, działa na pustych kolekcjach i może zwracać inny typ.
  • reduce rozpoczyna 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.

Wszystkie lekcje w tym kursie

  1. Filtrowanie i mapowanie
  2. Grupowanie i partycjonowanie
  3. Agregacja
  4. Tworzenie map i spłaszczanie
← Powrót do Kotlin Academy