0Pricing
Kotlin Academy · Lezione

Aggregazione

sum, count, fold, reduce

Aggregazione è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Kotlin Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Kotlin Academy include 4 lezioni in totale.

Aggregazione delle raccolte

L'aggregazione riduce una raccolta a un singolo valore. Kotlin fornisce funzioni già pronte come sum, count, average, max e le funzioni generiche fold e reduce.

sum e average

sum somma gli elementi numerici, mentre average restituisce la loro media come Double.

fun main() {
    val numbers = listOf(2, 4, 6, 8)
    println("Sum: ${numbers.sum()}")
    println("Average: ${numbers.average()}")
}

count

count restituisce il numero di elementi, con la possibilità di filtrarlo tramite un predicato.

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5, 6)
    println("Total: ${numbers.count()}")
    println("Even count: ${numbers.count { it % 2 == 0 }}")
}

maxOrNull e minOrNull

Per trovare in sicurezza i valori estremi, usare maxOrNull e minOrNull, che restituiscono null per le raccolte vuote.

fun main() {
    val numbers = listOf(3, 7, 2, 9, 4)
    println("Max: ${numbers.maxOrNull()}")
    println("Min: ${numbers.minOrNull()}")
}

sumOf e maxByOrNull

sumOf somma il valore selezionato per ogni elemento, mentre maxByOrNull trova l'elemento con il valore selezionato più grande.

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

La funzione fold

fold combina gli elementi in un unico risultato, partendo da un valore iniziale. La lambda riceve l'accumulatore corrente e l'elemento attuale.

fun main() {
    val numbers = listOf(1, 2, 3, 4)
    val total = numbers.fold(100) { acc, n -> acc + n }
    println(total)
}

fold può cambiare il tipo

Poiché si fornisce il valore iniziale, fold può costruire un risultato di qualsiasi tipo, ad esempio una String.

fun main() {
    val words = listOf("Kotlin", "is", "fun")
    val sentence = words.fold("") { acc, w -> if (acc.isEmpty()) w else "$acc $w" }
    println(sentence)
}

La funzione reduce

reduce è simile a fold, ma usa il primo elemento come accumulatore iniziale. Genera un'eccezione se la raccolta è vuota e non può cambiare il tipo.

fun main() {
    val numbers = listOf(1, 2, 3, 4)
    val product = numbers.reduce { acc, n -> acc * n }
    println(product)
}

fold rispetto a reduce

Differenze principali:

  • fold accetta un valore iniziale, funziona con raccolte vuote e può restituire un tipo diverso.
  • reduce parte dal primo elemento, non funziona con raccolte vuote e mantiene il tipo degli elementi.
fun main() {
    val empty = emptyList<Int>()
    println(empty.fold(0) { acc, n -> acc + n })
    println("fold is safe on empty lists")
}

runningFold e runningReduce

Se sono necessari tutti gli accumulatori intermedi, runningFold e runningReduce restituiscono la lista dei risultati parziali.

fun main() {
    val numbers = listOf(1, 2, 3, 4)
    val sums = numbers.runningFold(0) { acc, n -> acc + n }
    println(sums)
}

Scegliere l'aggregatore

Usare le funzioni specializzate, come sum, count, average e maxOrNull, quando sono adatte. Ricorrere a fold o reduce per combinazioni personalizzate, preferendo fold quando è necessario un valore iniziale o cambiare il tipo.

Verifica rapida

Qual è la differenza principale tra fold e reduce?

Riepilogo

Ha imparato ad aggregare con sum, count, average, maxOrNull e sumOf, oltre a usare fold, con valore iniziale, qualsiasi tipo e gestione sicura delle raccolte vuote, e reduce, che usa il primo elemento come valore iniziale. Nel prossimo passaggio costruirà mappe e appiattirà raccolte annidate.

Domande Frequenti

La lezione «Aggregazione» è gratuita?

Sì — il testo completo di «Aggregazione» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Kotlin Academy, passa a CoddyKit PRO. Il corso Kotlin Academy include 4 lezioni in totale.

Cosa imparerò in «Aggregazione»?

sum, count, fold, reduce Eserciti Kotlin Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Kotlin Academy?

Non è richiesta alcuna esperienza precedente. Kotlin Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Aggregazione»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Kotlin Academy?

Sì. Ogni lezione Kotlin Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Filtraggio e mapping
  2. Raggruppamento e partizionamento
  3. Aggregazione
  4. Associazione e flattening
← Torna a Kotlin Academy