Eliminar elemento repetido de una lista en Groovy
Las listas en Groovy son objetos contenedores que pueden almacenar una cantidad variada de valores de un mismo tipo, su tamaño es dinámico, lo que les permite expandirse o reducirse cuando se añade o se elimina un elemento usando sus diferentes métodos.
Descripción del tema: dada una lista de números repetidos, el usuario ingresa el número que desea eliminar y el programa debe eliminar todos los elementos de la lista que sean igual a dicho número. El programa debe mostrar en pantalla primero la lista actual con los elementos que posee y después la lista modificada.
Código fuente
def removeItems(List<Integer> lista, Integer item) { while(lista.contains(item)) { lista.removeElement(item) } lista } def lista = [2, 90, 89, 2, 5, 101, 90, 35, 2, 89, 101, 5, 89] Scanner input = new Scanner(System.in) println("Lista actual: ${lista}") print("\nIngrese el elemento que desea eliminar: ") def item = input.nextInt() println("Lista modificada: ${removeItems(lista, item)}")
Vamos a usar una función para separar el código que procesa la información del código que recibe y muestra la información al usuario. Un detalle a observar es que en Groovy no se requiere crear una clase con una función main como sí ocurre en Java, se puede escribir el código al estilo de Python.
Función removeItems()
Esta función recibe 2 argumentos, el primero es un objeto List que corresponde a la lista que contiene todos los elementos y el segundo corresponde al item que deseamos eliminar de la lista.
def removeItems(List<Integer> lista, Integer item) { while(lista.contains(item)) { lista.removeElement(item) } lista }
Las funciones en Groovy se pueden crear al estilo Java o con la palabra reservada def, como se puede ver en el código. También se puede omitir la sentencia return en las funciones que devuelven algún valor.
Bucle while() recorriendo la lista y eliminando el elemento
Se utilizará un bucle while para recorrer la lista e ir eliminando el elemento indicado por el usuario, como se muestra a continuación en el fragmento de código.
while(lista.contains(item)) { lista.removeElement(item) }
En el bucle while() usamos el objeto “lista” y luego con el método .contains() verificamos si la lista contiene el elemento item; el bucle va a iterar mientras item exista en la lista. Usamos el método .removeElement() para eliminar el elemento.
Por último devolvemos la lista modificada, no requerimos usar la sentencia return para hacerlo; solo basta con escribir el nombre del objeto al final de la función, como se muestra en la función removeItems().
Creando la lista.
Groovy tiene una sintaxis muy similar a la Python para crear listas, solo basta con escribir def lista = []
.
def lista = [2, 90, 89, 2, 5, 101, 90, 35, 2, 89, 101, 5, 89]
Creamos la lista llamada “lista” que contiene varios elementos de tipo numérico repetidos.
Creando objeto Scanner()
El objeto de tipo Scanner nos sirve para leer datos desde la terminal, funciona de la misma forma que en Java y lo usaremos para permitir al usuario ingresar el elemento de la lista que desea eliminar.
Scanner input = new Scanner(System.in)
Llamaremos a este objeto input.
Mostrando lista actual.
println("Lista actual: ${lista}")
Mostramos la lista actual sin ser modificada, usamos la función println() e interpolamos el contenido de la lista en el string usando ${}. Esto muestra un mensaje como el siguiente:
Lista actual: [2, 90, 89, 2, 5, 101, 90, 35, 2, 89, 101, 5, 89]
Solicitando información al usuario
El programa debe permitir que sea el usuario quien decida cuál es el elemento de la lista desea eliminar sin necesidad de modificar el código del programa.
print("\nIngrese el elemento que desea eliminar: ") def item = input.nextInt()
Le solicitamos al usuario que ingrese el elemento que desea eliminar de la lista, luego llamamos al método .nextInt() del objeto input para leer datos de tipo Entero (Integer) y lo almacenamos en la variable item.
Llamando a la función removeItems() y mostrando el resultado.
El programa debe mostrar como resultado la lista modificada.
println("Lista modificada: ${removeItems(lista, item)}")
La función es llamada directamente en el string en la función println() dentro de ${}, pasamos la lista y el item que deseamos eliminar el usuario y el resultado devuelto es mostrado en pantalla.
Probando el programa
Vamos ahora a ejecutar el programa para probarlo.
[fixedtorres@linuxero]$ groovy EliminarElementosDeUnaLista.groovy Lista actual: [2, 90, 89, 2, 5, 101, 90, 35, 2, 89, 101, 5, 89] Ingrese el elemento que desea eliminar: 89 Lista modificada: [2, 90, 2, 5, 101, 90, 35, 2, 101, 5] [fixedtorres@linuxero]$
Todo ha salido bien, le indicamos al programa que deseamos eliminar el número 89 y lo ha eliminado junto con cualquier elemento esté repetido.