example - Bucle foreach de Java: para(Integer i: list){…}
java iterate list of objects (4)
A veces es mejor usar un iterador.
(Al parecer, el "85%" de las solicitudes de un índice en el bucle elegante es para implementar un método de unión de String
(que puede prescindir fácilmente)).
Cuando uso JDK5 como abajo
ArrayList<Integer> list = new ArrayList<Integer>();
for (Integer i : list) {
//cannot check if already reached last item
}
por otro lado si solo uso un Iterator
ArrayList<Integer> list = new ArrayList<Integer>();
for (Iterator i = list.iterator(); i.hasNext();) {
//i can check whether this is last item
if(i.hasNextItem()){
}
}
¿Cómo puedo comprobar si ya he alcanzado el último elemento con for (Integer i : list) {
De otra manera, puedes usar un objeto de paso para capturar el último valor y luego hacer algo con él:
List<Integer> list = new ArrayList<Integer>();
Integer lastValue = null;
for (Integer i : list) {
// do stuff
lastValue = i;
}
// do stuff with last value
La API no soporta eso directamente. Puede usar el bucle for (int i ..) y contar los elementos o usar subListas (0, tamaño - 1) y manejar el último elemento explícitamente:
if(x.isEmpty()) return;
int last = x.size() - 1;
for(Integer i : x.subList(0, last)) out.println(i);
out.println("last " + x.get(last));
Esto solo es útil si no introduce redundancia. Se desempeña mejor que la versión de conteo (después de que se amortiza la sobrecarga de la lista secundaria). (En caso de que te importara después del boxeo de todos modos).
Una forma de hacerlo es usar un contador:
ArrayList<Integer> list = new ArrayList<Integer>();
...
int size = list.size();
for (Integer i : list) {
...
if (--size == 0) {
// Last item.
...
}
}
Editar
De todos modos, como dijo Tom Hawtin, a veces es mejor usar la sintaxis "antigua" cuando necesita obtener la información del índice actual, utilizando un bucle for
o iterator
, ya que todo lo que gane al usar la sintaxis Java5 se perderá. el propio bucle ...
for (int i = 0; i < list.size(); i++) {
...
if (i == (list.size() - 1)) {
// Last item...
}
}
o
for (Iterator it = list.iterator(); it.hasNext(); ) {
...
if (!it.hasNext()) {
// Last item...
}
}