Java Arraylist eliminar elementos múltiples por índice
Aquí está mi código:
for (int i = 0; i < myarraylist.size(); i++) { for (int j = 0; j < stopwords.size(); j++) { if (stopwords.get(j).equals(myarraylist.get(i))) { myarraylist.remove(i); id.remove(i); i--; // to look at the same index again! } } }
Tengo el problema .. después de que el elemento quitado, todo el índice cambió siempre, el lazo por arriba tan sucio.
- Android - Facebook ¿Intención de visitar una página en Facebook?
- 'Android-24' requiere JDK 1.8 o posterior para compilar
- Fondo alfa en FAB hecho clic
- Establecer credenciales en una vista Web de Android mediante una conexión HTTPS segura
- File.delete () no elimina completamente el archivo de imagen en blanco que quedó atrás
Para ilustrar: Tengo 54 datos, pero el bucle anterior se vuelve desordenado después de eliminar el elemento .. tan sólo 50 datos que se comprueban.
¿Hay otra manera o fijar mi código para quitar el elemento múltiple por el índice ?? Índice de elementos es tan importante para mí, para eliminar otro arraylist que tienen el mismo índice.
- ¿Debería evitarse también el finalizador de Java para la gestión del ciclo de vida de los objetos nativos?
- Cómo dibujar liso / camino redondeado?
- adb no puede encontrar mi dispositivo para la depuración de Android. ¿Por qué?
- Acerca de los nuevos métodos y métodos obsoletos en las API de Android
- Android Keystore Error "no pudo generar clave en keystore"
- ¿Cómo Android conjunto de fuentes personalizadas en la lona?
- IOException e es nulo
- Cómo actualizar la vista de lista expandible cuando se cambian los datos del adaptador
Una cosa que debe tener en cuenta es que cuando se utiliza ArrayLists
que están destinados a ser versátil, más que Arrays
. Puede acortar una matriz quitando un índice completo, añadir un índice a ella y hacer maravillas con ArrayLists
.
Este es un problema común con personas que no se dan cuenta, o recuerdan, que cuando se elimina un valor, los índices ArrayList
(o lo que sea el plural correcto) se reajustan y el ArrayList
acorta.
Al intentar quitar elementos de un ArrayList
, siempre debe iniciar al final de la ArrayList
.
for(int x = arrayList.size() - 1; x > 0; x--) { arrayList.remove(x); }
Esto debe proporcionarle la función que usted está buscando. Echa un vistazo a la API de ArrayList para conocer otros métodos que pueden ayudarte.
Utilice Iterator.remove()
para eliminar elementos durante la iteración.
for (Iterator<String> iter = myarraylist.iterator(); iter.hasNext(); ) { String element = iter.next(); if (element meets some criteria) { iter.remove(); } }
O utilizar el filtro de Google Guava que devuelve una vista filtrada y deja la lista original sin cambios.
Iterable<String> filtered = Iterables.filter(myarraylist, new Predicate<String>() { public boolean apply(String element) { return true of false based on criteria } });
Parece que desea eliminar una colección de otra .. Debería utilizar java.util.Collection # removeAll método en su lugar
No está seguro de por qué desea hacer esto por índice, pero puede probar esto (no probado):
int dynamicSize = myarraylist.size(); for (int i = 0; i < dynamicSize; i++) { for (int j = 0; j < stopwords.size(); j++) { if (stopwords.get(j).equals(myarraylist.get(i))) { myarraylist.remove(i); id.remove(i); i--; // to look at the same index again! dynamicSize--; } } }
Mientras itera la lista y estás quitando el iterador del uso del objeto.
Iterator myListItr = myarraylist.iterator(); //Iterate on list while(myListItr .hasNext()) { //if stop words is list of string then contains will work as it is. If its your custom object then override equals method. if(stopwords.contains( myListItr.next())){ myListItr.remove(); } }
Utilizar ListIterator
ArrayList<String> list = new ArrayList<String>(); // List : ["java", ".net", "javascript", "html", "css", "selenium", "image", "Spring"] ArrayList<Integer> indexes = new ArrayList<Integer>(); // indexes : [5, 3, 2, 5, 0] // Sort the Indexes in Order to remove from back words. and make Unique TreeSet<Integer> uniqueSorted = new TreeSet<Integer>(); uniqueSorted.addAll(indexes); // To remove all elements from the ArrayList and make its size = 0 indexes.clear(); indexes.addAll(uniqueSorted); // Iterate form back, so that if size decreases also no problem. ListIterator<Integer> li = indexes.listIterator(indexes.size()); // we can traverse a List in both the directions (forward and Backward). while(li.hasPrevious()) { int position = li.previous(); list.remove(position); }