0Pricing
Kotlin Academy · Lección

map y flatMap: transformar cada elemento

Transforme colecciones con map y aplane resultados anidados con flatMap.

map y flatMap: transformar cada elemento es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 1 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 Kotlin Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Kotlin Academy incluye 4 lecciones en total.

Conceptos básicos de transformación

map aplica una función a cada elemento y devuelve una colección nueva del mismo tamaño. flatMap hace lo mismo, pero aplana las listas de listas en una sola lista.

map básico

Transforme cada elemento con una lambda; el resultado tiene el mismo tamaño que la entrada.

fun main() {
    val nums = listOf(1, 2, 3, 4)
    val squares = nums.map { it * it }
    println(squares) // [1, 4, 9, 16]
}

map cambia el tipo

El tipo de los elementos de salida puede diferir del de entrada: List<Int> puede convertirse en List<String>.

fun main() {
    val nums = listOf(1, 2, 3)
    val labels = nums.map { "Item $it" }
    println(labels)
}

map en una clase de datos

Extraiga una propiedad de cada elemento; convierta las clases de datos en tipos más sencillos.

data class User(val name: String, val age: Int)
fun main() {
    val users = listOf(User("Ada", 35), User("Ben", 22))
    val names = users.map { it.name }
    println(names) // [Ada, Ben]
}

Encadenamiento de llamadas a map

Varias llamadas a map se componen de forma natural: cada una transforma la salida de la anterior.

fun main() {
    val nums = listOf(1, 2, 3)
    val result = nums.map { it + 1 }.map { it * 10 }
    println(result) // [20, 30, 40]
}

flatMap básico

flatMap llama a una función que devuelve una lista para cada elemento y después aplana todos los resultados en una sola lista.

fun main() {
    val words = listOf("hello", "world")
    val chars = words.flatMap { it.toList() }
    println(chars) // [h, e, l, l, o, w, o, r, l, d]
}

Cuándo utilizar flatMap

Utilice flatMap cuando la lambda produzca naturalmente una lista y quiera obtener un único resultado plano en lugar de una lista de listas.

data class Order(val items: List<String>)
fun main() {
    val orders = listOf(
        Order(listOf("pen", "book")),
        Order(listOf("lamp")),
        Order(listOf("mug", "ring"))
    )
    val allItems = orders.flatMap { it.items }
    println(allItems) // [pen, book, lamp, mug, ring]
}

map de List frente a flatMap

Compare los tipos de resultado: map conserva el anidamiento, mientras que flatMap lo elimina.

fun main() {
    val nums = listOf(1, 2, 3)
    val mapped = nums.map { listOf(it, it * 10) }
    val flat = nums.flatMap { listOf(it, it * 10) }
    println(mapped) // [[1, 10], [2, 20], [3, 30]]
    println(flat)   // [1, 10, 2, 20, 3, 30]
}

flatMap con listas condicionales

Devuelva listas vacías para los elementos que quiera descartar: flatMap filtra y transforma en un solo paso.

fun main() {
    val nums = listOf(1, 2, 3, 4, 5)
    val doubled = nums.flatMap { if (it % 2 == 0) listOf(it, it * 2) else emptyList() }
    println(doubled) // [2, 4, 4, 8]
}

map con índice

mapIndexed proporciona a la lambda tanto el índice como el valor.

fun main() {
    val fruits = listOf("apple", "banana", "cherry")
    val labeled = fruits.mapIndexed { i, name -> "$i: $name" }
    println(labeled)
}

Sequence frente a List

Para cadenas muy largas, convierta primero la colección en una Sequence para evitar crear listas intermedias.

fun main() {
    val big = (1..100).asSequence()
        .map { it + 1 }
        .filter { it % 5 == 0 }
        .map { it * 2 }
        .toList()
    println(big.take(5)) // first 5 results
}

Comprobación rápida

¿Cuál es la diferencia fundamental entre map y flatMap?

Resumen

map transforma cada elemento (mantiene el tamaño, aunque puede cambiar el tipo). flatMap aplica una función que devuelve una lista y después concatena todos los resultados. Combine estas funciones con mapIndexed para obtener índices y cambie a Sequence para crear pipelines perezosos largos.

Preguntas frecuentes

¿La lección «map y flatMap: transformar cada elemento» es gratis?

Sí — el texto completo de «map y flatMap: transformar cada elemento» 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 Kotlin Academy, actualiza a CoddyKit PRO. El curso de Kotlin Academy incluye 4 lecciones en total.

¿Qué aprenderé en «map y flatMap: transformar cada elemento»?

Transforme colecciones con map y aplane resultados anidados con flatMap. Practicas Kotlin Academy 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 Kotlin Academy?

No se requiere experiencia previa. Kotlin Academy 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 1 de 4.

¿Cuánto tiempo toma la lección «map y flatMap: transformar cada elemento»?

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 Kotlin Academy?

Sí. Cada lección de Kotlin Academy 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. map y flatMap: transformar cada elemento
  2. filter, filterNot y partition
  3. fold, reduce y runningFold
  4. Encadenar pipelines y evitar listas intermedias con Sequence
← Volver a Kotlin Academy