0Pricing
Scala for Backend Engineering & Functional Programming · Lección

Transformaciones

map, filter, flatMap

Transformaciones es una lección gratuita de Scala for Backend Engineering & Functional Programming en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Scala for Backend Engineering & Functional Programming, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Scala for Backend Engineering & Functional Programming incluye 4 lecciones en total.

Transformar colecciones

Las colecciones de Scala son inmutables de forma predeterminada. En lugar de modificarlas, transfórmelas en colecciones nuevas mediante métodos como map, filter y 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: transformar cada elemento

map aplica una función a cada elemento y devuelve una colección nueva del mismo tamaño. El tipo de los elementos puede cambiar.

object Main {
  def main(args: Array[String]): Unit = {
    val words = List("scala", "rocks")
    val lengths = words.map(_.length)
    println(lengths)
  }
}

La abreviatura con guion bajo

El guion bajo _ es una abreviatura para un único parámetro de función. _ * 2 significa x => x * 2. Permite mantener compactas las transformaciones sencillas.

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: conservar los elementos coincidentes

filter conserva únicamente los elementos para los que el predicado devuelve true. El resultado puede ser más pequeño que el original.

object Main {
  def main(args: Array[String]): Unit = {
    val nums = (1 to 10).toList
    val evens = nums.filter(_ % 2 == 0)
    println(evens)
  }
}

filterNot: lo contrario

filterNot conserva los elementos cuyo predicado es false. Es el complemento de filter.

object Main {
  def main(args: Array[String]): Unit = {
    val nums = List(1, 2, 3, 4, 5)
    println(nums.filterNot(_ % 2 == 0))
  }
}

flatMap: map y después aplanar

flatMap aplica una función que devuelve una colección para cada elemento y, después, aplana los resultados en una sola colección.

object Main {
  def main(args: Array[String]): Unit = {
    val words = List("ab", "cd")
    val chars = words.flatMap(_.toList)
    println(chars)
  }
}

map frente a flatMap

Si su función devuelve una colección, map produce colecciones anidadas, mientras que flatMap produce una colección plana. Elija según la estructura que necesite.

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

Aplicar flatMap a una lista de Option descarta los valores None y desenvuelve los valores Some; es una forma práctica de filtrar y transformar al mismo tiempo.

object Main {
  def main(args: Array[String]): Unit = {
    val raw = List("1", "x", "3", "y")
    val parsed = raw.flatMap(_.toIntOption)
    println(parsed)
  }
}

collect: filtrar y transformar a la vez

collect recibe una función parcial: conserva y transforma únicamente los elementos para los que la función está definida, combinando filter y map en un solo recorrido.

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

Encadenar transformaciones

Como cada método devuelve una colección nueva, puede encadenarlos en una canalización legible. Cada paso transforma la salida del anterior.

object Main {
  def main(args: Array[String]): Unit = {
    val result = List(1, 2, 3, 4)
      .map(_ + 1)
      .filter(_ % 2 == 0)
    println(result)
  }
}

Una canalización clara

Esta es una canalización de transformación ordenada: filtrar los números pares, elevarlos al cuadrado y, después, conservar los grandes. Las canalizaciones se leen como una descripción del flujo de datos.

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

Comprobación rápida

¿Qué devuelve List("ab", "cd").flatMap(_.toList)?

Resumen

Ha aprendido las transformaciones principales:

  • map — transformar cada elemento, manteniendo el mismo tamaño
  • filter / filterNot — conservar o descartar según un predicado
  • flatMap — aplicar map y después aplanar los resultados anidados
  • collect — filtrar y transformar con una función parcial
  • Encadenarlas en canalizaciones legibles e inmutables

Preguntas frecuentes

¿La lección «Transformaciones» es gratis?

Sí — el texto completo de «Transformaciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Scala for Backend Engineering & Functional Programming, actualiza a CoddyKit PRO. El curso de Scala for Backend Engineering & Functional Programming incluye 4 lecciones en total.

¿Qué aprenderé en «Transformaciones»?

map, filter, flatMap Practicas Scala for Backend Engineering & Functional Programming con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Scala for Backend Engineering & Functional Programming?

No se requiere experiencia previa. Scala for Backend Engineering & Functional Programming en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Transformaciones»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Scala for Backend Engineering & Functional Programming?

Sí. Cada lección de Scala for Backend Engineering & Functional Programming incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. List, Vector, Set, Map
  2. Transformaciones
  3. Plegado y reducción
  4. Agrupación y ordenamiento
← Volver a Scala for Backend Engineering & Functional Programming