una - for each java netbeans
¿Es posible obtener el índice de un bucle for-each en Java? (5)
¿Qué hay de usar el Iterator
adecuado y su método de remove
?
List<Properties> propertiesList = new ArrayList<Properties>();
String keyToDelete = "blah";
for (
Iterator<Properties> iter = propertiesList.iterator( );
iter.hasNext( );
)
{
Properties p = iter.next( );
if(p.getKey().equals(keyToDelete)) {
iter.remove( );
}
}
Dado el siguiente código, ¿es posible eliminar el índice de p
de la lista de propiedades usando este estilo de bucle for en Java?
List<Properties> propertiesList = new ArrayList<Properties>();
String keyToDelete = "blah";
for(Properties p : propertiesList) {
if(p.getKey().equals(keyToDelete)) {
propertiesList.remove(index) //How to remove the element at index ''p''
}
}
Así es como lograría esto con el otro bucle.
List<Properties> propertiesList = new ArrayList<Properties>();
String keyToDelete = "blah";
for(int i = 0; i < propertiesList.size(); i++) {
if(p.getKey().equals(keyToDelete)) {
propertiesList.remove(i);
}
}
Como Tim Anderson sugirió, también podría modificar la lista fuera del bucle.
List<Properties> propertiesList = new ArrayList<Properties>();
String keyToDelete = "blah";
List<Properties> propertiesToRemove = new ArrayList<Properties>();
for(Properties p : propertiesList) {
if(p.getKey().equals(keyToDelete)) {
propertiesToRemove.add(p) ;
}
}
propertiesList.removeAll(propertiesToRemove);
La forma de hacerlo es con un Iterator
explícito (¡no hay escuela como la escuela antigua!).
Iterator<Properties> it = propertiesList.iterator();
while (it.hasNext()) {
if (it.next().getKey().equals(keyToDelete)) {
it.remove();
}
}
A diferencia del método de eliminación en una lista, el Iterator no causa una modificación concurrente. Es la única forma segura de eliminar un elemento de una colección sobre la que se está iterando. Como dice el javadoc para ese método:
El comportamiento de un iterador no se especifica si la colección subyacente se modifica mientras la iteración está en curso de otra manera que no sea llamando a este método.
No, necesitas usar el bucle de la vieja escuela para obtener un índice.
Por supuesto, podría agregarlo usted mismo al bucle for-each, pero probablemente lo mejor sería usar la variante anterior.
Que yo sepa, el bucle foreach no garantiza el orden de los elementos que enumera,
así que si intentas Colección [i] puedes obtener otro elemento en lugar de iterado actualmente
Se puede ver claramente en algunos casos multihilo.