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ñofilter/filterNot— conservar o descartar según un predicadoflatMap— aplicar map y después aplanar los resultados anidadoscollect— 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.