Eliminar elemento repetido de una lista en Kotlin

Las listas en Kotlin son objetos contenedores que pueden almacenar un número variado de valores de un mismo tipo, poseen un tamaño dinámico que les permite expandirse o reducirse cuando se añade o se elimina un elemento.

Descripción del tema: dada una lista de números, algunos repetidos, se le pregunta al usuario cuál desea eliminar y el programa debe eliminar todos los elementos de la lista que sean igual al número ingresado por el usuario. El programa debe mostrar en pantalla primero la lista actual con los elementos que posee.

Código fuente
fun main(args: Array<String>) {
    val list = 
        mutableListOf<Int>(2, 90, 89, 2, 5, 101, 90, 35, 2, 43, 89, 101, 5, 89, 90)
    val item: Int

    println("Lista actual: $arrs")

    print("\n¿Que elemento desea eliminar?: ")
    item = readLine().toString().toInt()

    if(list.removeAll { it == item }) {
        println("Lista modificada: ${list}")
    } else {
        println("El elemento no existe!!")
    }
}

Kotlin requiere obligatoriamente una función principal llamada main(), como en C++, Go y Java, y es la única función que es ejecutada cuando se ejecuta el programa. Todo lo que se encuentre en su interior será ejecutado, incluyendo llamadas a otras  funciones e instancias de objetos.

Creando lista
val list = mutableListOf(2, 90, 89, 2, 5, 101, 90, 35, 2, 43, 89, 101, 5, 89, 90)

Creamos una lista mutable con varios elementos de tipo Int, casi todos repetidos. Para crear listas mutables solo es necesario llamar a mutableListOf<Int>(), el tipo lista es opcional, solo si se puede inferir desde el contexto.

Creando variable
val item: Int

Creamos la variable que almacenará el valor del item ingresado por el usuario, es de tipo Int.

Mostrando lista actual
println("Lista actual: $list")

Mostramos al usuario los elementos que tiene la lista actual, la expresión usando interpolación con la expresión $list.

Solicitando y leyendo el elemento a eliminar
print("\n¿Que elemento desea eliminar?: ")
item = readLine().toString().toInt()

El programa primero le solicita al usuario que ingrese el elemento que desea eliminar y luego lo lee usando la función readLine(), pero hay que convertirlo a String con el método .toString() y por último lo convierte a tipo entero llamando al método .toInt(). El valor se almacena en la variable item.

Eliminando el elemento y mostrando el resultado
if(arrs.removeAll { it == item }) {
    println("Lista modificada: ${arrs}")
} else {
    println("El elemento no existe!!")
}

Este fragmento de código nos garantiza 2 cosas seguras:

  1. Verifica que el elemento exista y sea eliminado con éxito.
  2. Si el elemento no existe entonces nos lo informa.

La expresión arrs.removeAll { it == item } devuelve true si la operación fue exitosa y funciona de la siguiente forma, el método .removeAll {} elimina todos los elementos que sean iguales al valor de item y la expresión booleana it == item, evalúa si cada valor de it es igual al de item. Si el elemento repetido fue eliminado entonces nos muestra la lista modificada sin los elementos que se han eliminado, de lo contrario nos informa que el elemento no existe.

Ejecutando el programa

Al ejecutar nuestro programa, nos muestra lo siguiente:

[fixedtorres@linuxero]$ kotlinc -include-runtime EliminarElementoDeUnaLista.kt -d EliminarElementoDeUnaLista.jar
[fixedtorres@linuxero En Kotlin - JVM - Compilado]$ kotlin  EliminarElementoDeUnaLista.jar
Lista actual: [2, 90, 89, 2, 5, 101, 90, 35, 2, 43, 89, 101, 5, 89, 90]

¿Que elemento desea eliminar?: 90
Lista modificada: [2, 89, 2, 5, 101, 35, 2, 43, 89, 101, 5, 89]
[fixedtorres@linuxero]$

Nos muestra la lista actual, solicita que ingresemos el elemento que deseamos eliminar y nos devuelve la lista sin el elemento que ingresamos, y si hay repetidos, los elimina. En este caso se elimina el 90 que se repite 3 veces.

Si desea saber más sobre cómo compilar y ejecutar aplicaciones desde la línea de comandos, ingrese a este link.



Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *