Listas En Kotlin

En este tutorial verás cómo crear listas en Kotlin con el fin de manejar una cantidad variable de elementos en forma ordenada y permitiendo duplicados.

La Interfaz List

Una lista es una colección genérica de elementos que se caracteriza por almacenarlos de forma ordenada, donde pueden existir duplicados (incluso un ítem null) y se indexan los elementos con base 0.

Su diseño es representado por la interfaz genérica List<E>, la cual hereda las operaciones base para colecciones de Collection<E>:

interface List<out E> : Collection<E>

Si deseas crear una lista debes primero definir si será de solo lectura o mutable. Veamos la sintaxis de creación en ambos casos.

Listas De Solo Lectura

Similar a las variables de solo lectura, una lista de solo lectura (read-only list) puede ser consultada luego de ser inicializada, pero no te permite el uso de comandos para cambiar su estado.

Para crear una lista de solo lectura usa la función listOf(), la cual recibe como argumentos un grupo de ítems de un mismo tipo. Por ejemplo, crear una lista de los enteros del 1 al 5 se vería así:

fun main() {
    val oneToFiveList: List<Int> = listOf(1, 2, 3, 4, 5)
    println(oneToFiveList) // [1, 2, 3, 4, 5]
}

Al inicializar una lista cuyo contenido sea claro, es posible omitir el tipo parametrizado. Por lo que en el caso anterior puedes remover a List<Int>.

 val oneToFiveList = listOf(1, 2, 3, 4, 5)

Miembros De List

Para acceder al estado de la lista puedes usar los siguientes miembros básicos:

  • size para obtener la cantidad de elementos de la lista
  • lista[index] para obtener el elemento ubicado en index. Esta es la construcción para el operador de acceso posicional get(index)
  • indexOf(element) para obtener el índice de la primera ocurrencia de element
  • lastIndexOf(element) para obtener el índice de la última ocurrencia del element
  • subList(fromIndex, toIndex) para obtener una porción de la lista en el rango [fromIndex, toIndex)

Considera practicar con el ejemplo anterior el uso de los miembros anteriores de la siguiente forma:

fun main() {
    val oneToFiveList: List<Int> = listOf(1, 2, 3, 4, 5)

    println(oneToFiveList.size) // 5
    println(oneToFiveList.get(1)) // 2
    println(oneToFiveList[2]) // 3
    println(oneToFiveList.indexOf(5)) // 4
    println(oneToFiveList.lastIndexOf(6)) // -1
    println(oneToFiveList.subList(0, 2)) // [1, 2]
}

El tamaño de la lista es 5 como size lo indica. El operador get(1) retorna al número 2 pero IntelliJ IDEA te recomendará usar la notación de corchetes como hicimos con oneToFiveList[2].

Listas En Kotlin: Sholud be replaced with indexing en IntelliJ IDEA

El índice de 5 efectivamente es 4, ya que usamos al 0 como base. lastIndexOf(6) será -1 porque 6 no existe en la lista. Y subList(0,2) obtiene a los elementos 1 y 2 debido a que el índice 2 se excluye de la obtención.

Listas Mutables

Una lista mutable es representada por la interfaz MutableList<E>. Como puedes intuir, este tipo de listas además ser consultadas como List<E>, te permiten añadir, cambiar y remover elementos.

interface MutableList<E> : List<E>, MutableCollection<E>

Para crear una lista mutable usa la función mutableListOf() pasando el grupo de ítems de inicio. Y si deseas alterar el contenido usa los siguientes métodos:

  • add(element) para añadir un nuevo ítem en la parte superior de la lista
  • add(index, element) para insertar a ítem en un índice
  • removeAt(index) para eliminar ítem en un índice
  • [index]=element, para reemplazar un ítem en el índice. Esta construcción es equivalente al operador set(index, element)

Por ejemplo, supón que tenemos una lista de strings con nombres de colores. Si practicamos las operaciones anteriores podríamos moldear el contenido de la lista así:

fun main() {
    val colorsList = mutableListOf("Amarillo", "Azul", "Rojo")

    colorsList.add("Verde") // [Amarillo, Azul, Rojo, Verde]
    colorsList.add(0, "Blanco") // [Blanco, Amarillo, Azul, Rojo, Verde]
    colorsList.removeAt(2) // [Blanco, Amarillo, Rojo, Verde]
    colorsList[1] = "Negro" // [Blanco, Negro, Rojo, Verde]
    colorsList.sortDescending() 

    println(colorsList) // [Verde, Rojo, Negro, Blanco]
}

Las operaciones anteriores muestra el estado de los elementos en la lista y como varía su orden en cada comando. Se inicializa a colorsList con tres elementos iniciales, luego añadimos "Verde" al final, "Blanco" al inicio, removemos a "Azul" de la posición 2 y cambiamos "Amarillo" por "Negro".

Al final usamos la función de extensión sortDescending() para ordenar en forma descendente a los ítems.

Encuentra más operaciones sobre listas en la siguiente guía. En ellas verás ejemplos para transformar, filtrar, agrupar y obtener elementos de las mismas.

Únete Al Discord De Develou

Si tienes problemas con el código de este tutorial, preguntas, recomendaciones o solo deseas discutir sobre desarrollo Android conmigo y otros desarrolladores, únete a la comunidad de Discord de Develou y siéntete libre de participar como gustes. ¡Te espero!