Gruki Logo

Gruki - Documentación de Programación

Kotlin

¡Domina las Colecciones en Kotlin! (Explicado para niños y adultos)

Aprende a manipular colecciones en Kotlin de forma sencilla y divertida. Descubre cómo crear, filtrar, transformar y combinar listas, conjuntos y mapas como un experto.

En Kotlin, las colecciones son como cajas donde puedes guardar muchas cosas. Imagina una caja de juguetes, una caja de lápices de colores o incluso una caja de tus cromos favoritos. Cada caja (colección) tiene sus propias reglas sobre qué puedes hacer con las cosas que están dentro.

Por ejemplo, una lista es como una fila de niños esperando el autobús. Cada niño tiene un número (índice) que indica su posición en la fila. Un conjunto (Set) es como una bolsa de canicas donde no importa el orden, solo importa qué canicas están dentro. Y un mapa (Map) es como un diccionario, donde cada palabra (clave) tiene su significado (valor).

Listas en Kotlin: ¡Ordenadas y Fáciles de Usar!

Una lista en Kotlin es una colección ordenada de elementos. Puedes añadir elementos al final, al principio o en medio. También puedes ver qué elemento está en una posición específica.

Imagina que tienes una lista de nombres de tus amigos: Juan, María, Pedro. Puedes agregar a Sofía al final de la lista o puedes insertar a Ana entre Juan y María. ¡Las listas son súper flexibles!

Puntos importantes:

  • En Kotlin, hay dos tipos principales de listas: `List` (solo lectura) y `MutableList` (modificable). Piensa en `List` como una foto de tu caja de juguetes: puedes mirarla, pero no puedes cambiarla. `MutableList` es la caja real, ¡puedes agregar o quitar juguetes cuando quieras!
  • Para crear una lista, puedes usar la función `listOf()` (para listas de solo lectura) o `mutableListOf()` (para listas modificables).

Conjuntos (Sets): ¡Elementos Únicos, Sin Repeticiones!

Un conjunto en Kotlin es una colección que solo permite elementos únicos. Si intentas añadir un elemento que ya existe, ¡lo ignora!

Imagina que tienes una bolsa de bloques de construcción. Si intentas meter dos bloques rojos iguales, el segundo bloque simplemente no entra. ¡Solo hay un bloque rojo en la bolsa!

Puntos importantes:

  • Los conjuntos son útiles para eliminar duplicados de una lista. Por ejemplo, si tienes una lista de nombres con algunos repetidos, puedes convertirla en un conjunto para obtener solo los nombres únicos.
  • Para crear un conjunto, puedes usar la función `setOf()` (para conjuntos de solo lectura) o `mutableSetOf()` (para conjuntos modificables).

Mapas (Maps): ¡Clave-Valor, Como un Diccionario!

Un mapa en Kotlin es una colección de pares clave-valor. Cada clave está asociada con un valor específico. Piensa en un diccionario: cada palabra (clave) tiene su definición (valor).

Imagina un mapa que asocia el nombre de una fruta con su color. 'Manzana' se asocia con 'Roja', 'Banana' se asocia con 'Amarilla', 'Uva' se asocia con 'Morada'. ¡Así es como funcionan los mapas!

Puntos importantes:

  • Las claves en un mapa deben ser únicas. No puedes tener dos claves iguales asociadas con diferentes valores. ¡Sería como tener dos palabras iguales con diferentes definiciones en el diccionario!
  • Para crear un mapa, puedes usar la función `mapOf()` (para mapas de solo lectura) o `mutableMapOf()` (para mapas modificables).

Filtrado de Colecciones: ¡Encuentra lo que Buscas!

Filtrar una colección significa seleccionar solo los elementos que cumplen una condición específica. Es como buscar solo los juguetes rojos en tu caja de juguetes.

Imagina que tienes una lista de números: 1, 2, 3, 4, 5. Puedes filtrar la lista para obtener solo los números pares: 2, 4.

Puntos importantes:

  • En Kotlin, puedes usar la función `filter()` para filtrar una colección. `filter()` recibe una condición (una función que devuelve `true` o `false`) y devuelve una nueva colección con solo los elementos que cumplen esa condición.
  • La condición que le pasas a `filter()` se llama 'predicado'. Un predicado es simplemente una pregunta que haces sobre cada elemento de la colección. Por ejemplo, '¿Es este número par?'

Transformación de Colecciones: ¡Convierte tus Cosas en Algo Nuevo!

Transformar una colección significa cambiar cada elemento de la colección de una manera específica. Es como pintar todos tus juguetes azules de verde.

Imagina que tienes una lista de nombres: Juan, María, Pedro. Puedes transformar la lista para obtener una lista con la longitud de cada nombre: 4, 5, 5.

Puntos importantes:

  • En Kotlin, puedes usar la función `map()` para transformar una colección. `map()` recibe una función que transforma cada elemento y devuelve una nueva colección con los elementos transformados.
  • La función que le pasas a `map()` se aplica a cada elemento de la colección. Por ejemplo, si quieres duplicar cada número en una lista, la función multiplicaría cada número por 2.

Otras operaciones utiles

Existen otras operaciones que nos pueden servir en el trabajo del día a día

Dentro de estas operaciones se encuentra el `groupBy{}` que nos sirve para agrupar los elementos de una lista según la condición que le enviemos

Por otro lado tenemos el `associateBy{}` este nos ayuda a asociar cada elemento de una lista a una clave específica.

Puntos importantes:

  • groupBy es útil cuando se quiere dividir una lista en grupos basados en alguna propiedad común.
  • associateBy es útil cuando se necesita crear un mapa donde cada elemento de la lista se convierte en un valor y se asocia a una clave específica.

Ejemplos de Código

Ejemplo básico de creación y manipulación de una lista en Kotlin.

Lenguaje: Kotlin
kotlin

Explicación del código:

  1. Línea 1: `fun main() { ... }` define la función principal del programa, donde comienza la ejecución.
  2. Línea 2: `val numeros = mutableListOf(1, 2, 3, 4, 5)` crea una lista mutable llamada `numeros` y la inicializa con los números del 1 al 5. Es como crear una caja de juguetes y meter los juguetes 1, 2, 3, 4 y 5 dentro.
  3. Línea 3: `println("Lista original: $numeros")` imprime la lista original en la consola. Es como mostrar la caja de juguetes como está al principio.
  4. Línea 4: `numeros.add(6)` añade el número 6 al final de la lista. Es como meter un juguete nuevo (el número 6) en la caja.
  5. Línea 5: `println("Lista con un elemento añadido: $numeros")` imprime la lista después de añadir el número 6. Es como mostrar la caja de juguetes después de añadir el nuevo juguete.
  6. Línea 6: `numeros.remove(3)` elimina el número 3 de la lista. Es como sacar el juguete número 3 de la caja.
  7. Línea 7: `println("Lista con un elemento eliminado: $numeros")` imprime la lista después de eliminar el número 3. Es como mostrar la caja de juguetes después de sacar un juguete.
  8. Línea 8: `val numerosPares = numeros.filter { it % 2 == 0 }` crea una nueva lista llamada `numerosPares` que contiene solo los números pares de la lista original. La condición `it % 2 == 0` verifica si un número es par (el resto de la división entre 2 es 0).
  9. Línea 9: `println("Números pares: $numerosPares")` imprime la lista de números pares. Es como mostrar solo los juguetes pares de la caja.
  10. Línea 10: `val numerosAlCuadrado = numeros.map { it * it }` crea una nueva lista llamada `numerosAlCuadrado` que contiene el cuadrado de cada número de la lista original. La función `it * it` calcula el cuadrado de un número.
  11. Línea 11: `println("Números al cuadrado: $numerosAlCuadrado")` imprime la lista de números al cuadrado. Es como transformar cada juguete y mostrar el resultado.

Ejemplo de group by

Lenguaje: Kotlin
kotlin

Explicación del código:

  1. Línea 1: `data class Persona(val nombre: String, val edad: Int, val ciudad: String)`: Define una clase de datos llamada `Persona` con propiedades `nombre`, `edad` y `ciudad`.
  2. Línea 2: `val personas = listOf(...)`: Crea una lista de objetos `Persona` con diferentes nombres, edades y ciudades.
  3. Línea 3: `val personasPorCiudad = personas.groupBy { it.ciudad }`: Utiliza la función `groupBy` para agrupar las personas por su ciudad. El resultado es un mapa donde la clave es la ciudad y el valor es una lista de personas que viven en esa ciudad.
  4. Línea 4: `personasPorCiudad.forEach { ciudad, listaPersonas -> ... }`: Itera sobre el mapa `personasPorCiudad`. Para cada entrada del mapa, se obtiene la ciudad y la lista de personas que viven en esa ciudad.
  5. Línea 5: `println("Ciudad: $ciudad")`: Imprime el nombre de la ciudad.
  6. Línea 6: `listaPersonas.forEach { println("    - ${it.nombre}, ${it.edad} años") }`: Itera sobre la lista de personas que viven en la ciudad actual e imprime su nombre y edad.

Ejemplo de associateBy

Lenguaje: Kotlin
kotlin

Explicación del código:

  1. Línea 1: `data class Producto(val id: Int, val nombre: String, val precio: Double)`: Define una clase de datos llamada `Producto` con propiedades `id`, `nombre` y `precio`.
  2. Línea 2: `val productos = listOf(...)`: Crea una lista de objetos `Producto` con diferentes identificadores, nombres y precios.
  3. Línea 3: `val productosPorId = productos.associateBy { it.id }`: Utiliza la función `associateBy` para crear un mapa donde la clave es el `id` del producto y el valor es el objeto `Producto` correspondiente.
  4. Línea 4: `println(productosPorId[2])`: Imprime el producto con el `id` igual a 2. En este caso, imprimirá `Producto(id=2, nombre=Pantalón, precio=50.0)`.

Recursos relacionados

Explora más contenido relacionado con Manipulación de Colecciones para profundizar tus conocimientos.