una remove recorrer objetos metodos metodo lista imprimir enteros clase java arraylist bluej

java - remove - ¿Eliminar cadenas de longitud dada de una ArrayList?



metodos arraylist java (6)

Aunque creo que la respuesta de @SotiriosDelimanolis es probablemente lo que debes usar, también quería señalar que con Java 8 puedes hacer esto fácilmente usando Stream y Predicate para filtrar:

List<String> list2 = list.stream() .filter(s -> s.length() != 3) .collect(Collectors.toList());

Aquí hay una clase de prueba completa:

import java.util.*; import java.util.stream.*; class Test { public static void main(String args[]) { ArrayList<String> list = new ArrayList<String>(); list.add("This"); list.add("is"); list.add("an"); list.add("exercise"); list.add("to"); list.add("illustrate"); list.add("the"); list.add("use"); list.add("of"); list.add("ArrayLists"); list.add("."); System.out.println(list); List<String> list2 = list.stream() .filter(s -> s.length() != 3) .collect(Collectors.toList()); System.out.println(list2); } }

y mi resultado de prueba:

$ java Test [This, is, an, exercise, to, illustrate, the, use, of, ArrayLists, .] [This, is, an, exercise, to, illustrate, of, ArrayLists, .]

Se nos da una lista de palabras en forma de ArrayList de la siguiente manera:

public ArrayList<String> getListOfStrings(){ ArrayList<String> list = new ArrayList<String>(); list.add("This"); list.add("is"); list.add("an"); list.add("exercise"); list.add("to"); list.add("illustrate"); list.add("the"); list.add("use"); list.add("of"); list.add("ArrayLists"); list.add("."); return list; }

¿Cómo escribo un método que elimine todas las palabras en esa lista (es decir, todos los objetos en ArrayList) que tienen la longitud "len" ingresada por el usuario?

Ya escribí un método que enumera todas las palabras de longitud "len" ingresadas por el usuario, y funciona, es el siguiente:

public ArrayList<String>getWordsWithLength(int len, ArrayList<String> lijst){ ArrayList<String> list = new ArrayList<String>(); for(String woord: lijst){ if(woord.length()==len){ list.add(woord); } } return(list); }

Pero como principiante en Java, estoy atascado en cómo eliminar las palabras de longitud "len". ¡Por favor ayuda! (Tengo la impresión de que empiezas eliminándolos del final de la lista, como antes, al revés)


Debe eliminar valores de una List utilizando un Iterator para evitar una Iterator ConcurrentModificationException .

List<String> myList = getListOfStrings(); Iterator<String> it = myList.iterator(); while (it.hasNext()) { if(it.next().length() == 3){ it.remove(); } }


Incluso puede usar el mismo método agregando un parámetro booleano.

public ArrayList<String>getWordsWithLength(int len, ArrayList<String> lijst, boolean complement){ ArrayList<String> list = new ArrayList<String>(); for(String woord: lijst){ if((woord.length()==len) != complement){ list.add(woord); } } return(list); }

Si pasa el complement como true , si le dará todo con eso no tiene length == len . complement como false se comportará como de costumbre.


La forma en que su iteración actual a través de la lista no le permitirá eliminarla con una excepción, pero sí un iterador.

Iterator<String> it = list.iterator(); while(it.hasNext()) { if([Condition]) { it.remove(); } }


Su método ya puede servir como eliminación, simplemente cambie el == a a !=

public ArrayList<String> getStringsWithoutEqualLength(int len, ArrayList<String> lijst){ ArrayList<String> list = new ArrayList<String>(); for(String woord: lijst){ if(woord.length() != len){ list.add(woord); } } return(list); }

Si lo que intenta hacer es eliminar los elementos de lijst , entonces simplemente reasigne la lista devuelta.

ArrayList<String> yourList = ...; yourList = instance.getStringsWithoutEqualLength(someLength, yourList);

Ha eliminado efectivamente los elementos más largos y lo ha hecho más rápido que si hubiera utilizado un Iterator . Cada vez que elimina con un Iterator , tiene que cambiar el tamaño de su matriz de respaldo.


en Scala que acaba de hacer

list.filter(_.length != len)