Trasformazioni
map, filter, flatMap
Trasformazioni è una lezione Scala for Backend Engineering & Functional Programming gratuita su CoddyKit. Questa è la lezione 2 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 Scala for Backend Engineering & Functional Programming, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Scala for Backend Engineering & Functional Programming include 4 lezioni in totale.
Trasformare le collection
Le collection di Scala sono immutabili per impostazione predefinita. Invece di modificarle, le trasforma in nuove collection usando metodi come map, filter e flatMap.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4)
val doubled = nums.map(_ * 2)
println(nums)
println(doubled)
}
}map: trasformare ogni elemento
map applica una funzione a ogni elemento e restituisce una nuova collection della stessa dimensione. Il tipo degli elementi può cambiare.
object Main {
def main(args: Array[String]): Unit = {
val words = List("scala", "rocks")
val lengths = words.map(_.length)
println(lengths)
}
}La sintassi abbreviata con underscore
L'underscore _ è una forma abbreviata per un singolo parametro di funzione. _ * 2 significa x => x * 2. Permette di mantenere concise le trasformazioni semplici.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(10, 20, 30)
println(nums.map(_ + 1))
println(nums.map(x => x + 1))
}
}filter: conservare gli elementi corrispondenti
filter conserva solo gli elementi per i quali il predicato restituisce true. Il risultato può essere più piccolo dell'originale.
object Main {
def main(args: Array[String]): Unit = {
val nums = (1 to 10).toList
val evens = nums.filter(_ % 2 == 0)
println(evens)
}
}filterNot: l'opposto
filterNot conserva gli elementi per i quali il predicato è false. È il complemento di filter.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5)
println(nums.filterNot(_ % 2 == 0))
}
}flatMap: mappare e poi appiattire
flatMap applica una funzione che restituisce una collection per ogni elemento, poi appiattisce i risultati in un'unica collection.
object Main {
def main(args: Array[String]): Unit = {
val words = List("ab", "cd")
val chars = words.flatMap(_.toList)
println(chars)
}
}map e flatMap a confronto
Se la funzione restituisce una collection, map produce collection annidate, mentre flatMap ne produce una piatta. Scelga in base alla struttura desiderata.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3)
println(nums.map(n => List(n, n)))
println(nums.flatMap(n => List(n, n)))
}
}flatMap con Option
flatMap su una lista di Option elimina i valori None e estrae i valori Some: è un modo pratico per filtrare e trasformare contemporaneamente.
object Main {
def main(args: Array[String]): Unit = {
val raw = List("1", "x", "3", "y")
val parsed = raw.flatMap(_.toIntOption)
println(parsed)
}
}collect: filtrare e mappare insieme
collect accetta una funzione parziale: conserva e trasforma solo gli elementi per i quali la funzione è definita, combinando filter e map in un'unica passata.
object Main {
def main(args: Array[String]): Unit = {
val mixed: List[Any] = List(1, "two", 3, "four", 5)
val ints = mixed.collect { case i: Int => i * 10 }
println(ints)
}
}Concatenare le trasformazioni
Poiché ogni metodo restituisce una nuova collection, può concatenarli in una pipeline leggibile. Ogni passaggio trasforma l'output di quello precedente.
object Main {
def main(args: Array[String]): Unit = {
val result = List(1, 2, 3, 4)
.map(_ + 1)
.filter(_ % 2 == 0)
println(result)
}
}Una pipeline pulita
Ecco una pipeline di trasformazione ordinata: filtrare i numeri pari, elevarli al quadrato e poi conservare quelli grandi. Le pipeline si leggono come una descrizione del flusso dei dati.
object Main {
def main(args: Array[String]): Unit = {
val result = (1 to 10).toList
.filter(_ % 2 == 0)
.map(x => x * x)
.filter(_ > 10)
println(result)
}
}Verifica rapida
Che cosa restituisce List("ab", "cd").flatMap(_.toList)?
Riepilogo
Ha appreso le trasformazioni fondamentali:
map— trasforma ogni elemento, mantenendo la stessa dimensionefilter/filterNot— mantiene o scarta gli elementi in base a un predicatoflatMap— esegue il mapping e poi appiattisce i risultati annidaticollect— filtra ed esegue il mapping con una funzione parziale- Le combini in pipeline leggibili e immutabili
Domande Frequenti
La lezione «Trasformazioni» è gratuita?
Sì — il testo completo di «Trasformazioni» è 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 Scala for Backend Engineering & Functional Programming, passa a CoddyKit PRO. Il corso Scala for Backend Engineering & Functional Programming include 4 lezioni in totale.
Cosa imparerò in «Trasformazioni»?
map, filter, flatMap Eserciti Scala for Backend Engineering & Functional Programming 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 Scala for Backend Engineering & Functional Programming?
Non è richiesta alcuna esperienza precedente. Scala for Backend Engineering & Functional Programming su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Trasformazioni»?
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 Scala for Backend Engineering & Functional Programming?
Sì. Ogni lezione Scala for Backend Engineering & Functional Programming 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.