8. Colecciones: Agrupar datos
Listas: Ordenadas y duplicados
Kotlin tiene listas inmutables (listOf) y mutables (mutableListOf):
listas.kt
KOTLIN
1 // Lista inmutable
2 val frutas = listOf("Manzana", "Pera", "Naranja")
3 println(frutas[0]) // "Manzana"
4 // frutas.add("Uva") // ERROR
5
6 // Lista mutable
7 val carrito = mutableListOf("Leche", "Pan")
8 carrito.add("Huevos") // OK
9 carrito.remove("Pan") // OK
10 println(carrito) // [Leche, Huevos]
Sets y Maps
sets-maps.kt
KOTLIN
1 // Set: sin duplicados
2 val numeros = setOf(1, 2, 2, 3, 3)
3 println(numeros) // [1, 2, 3]
4
5 // Map: pares clave-valor
6 val edades = mapOf("Ana" to 25, "Luis" to 30)
7 println(edades["Ana"]) // 25
8 println(edades.keys) // [Ana, Luis]
9 println(edades.values) // [25, 30]
Métodos funcionales
La verdadera magia de Kotlin: transformar colecciones con elegancia:
funcionales.kt
KOTLIN
1 val numeros = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
2
3 // filter: filtrar elementos
4 val pares = numeros.filter { it % 2 == 0 }
5 println(pares) // [2, 4, 6, 8, 10]
6
7 // map: transformar cada elemento
8 val dobles = numeros.map { it * 2 }
9 println(dobles) // [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
10
11 // reduce: acumular en un solo valor
12 val suma = numeros.reduce { acc, i -> acc + i }
13 println(suma) // 55
14
15 // forEach: ejecutar acción por cada elemento
16 numeros.forEach { print("$it ") } // 1 2 3 4 5 6 7 8 9 10
17
18 // chained: filter + map
19 val resultado = numeros.filter { it > 3 }.map { it * 10 }
20 println(resultado) // [40, 50, 60, 70, 80, 90, 100]
💻 Misión
Crea una lista de 5 números. Usa filter para quedarte con los mayores a 3, map para duplicarlos, y reduce para sumarlos.
👁️ Ver solución sugerida
main.kt
KOTLIN
1 fun main() {
2 val numeros = listOf(1, 5, 2, 8, 3)
3 val resultado = numeros
4 .filter { it > 3 }
5 .map { it * 2 }
6 .reduce { acc, i -> acc + i }
7 println("Suma de duplicados mayores a 3: $resultado")
8 // (5 + 8) * 2 = 26
9 }