0Pricing
Scala for Backend Engineering & Functional Programming · Lezione

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 dimensione
  • filter / filterNot — mantiene o scarta gli elementi in base a un predicato
  • flatMap — esegue il mapping e poi appiattisce i risultati annidati
  • collect — 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.

Tutte le lezioni di questo corso

  1. List, Vector, Set, Map
  2. Trasformazioni
  3. Folding e riduzione
  4. Raggruppamento e ordinamento
← Torna a Scala for Backend Engineering & Functional Programming