Quand j'utilise JDK5 comme ci-dessous
ArrayList<Integer> list = new ArrayList<Integer>();
for (Integer i : list) {
//cannot check if already reached last item
}
d'autre part si j'utilise simplement 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()){
}
}
Comment puis-je vérifier si j'ai déjà atteint le dernier élément avec for (Integer i : list) {
Pour ce faire, vous pouvez utiliser un compteur:
ArrayList<Integer> list = new ArrayList<Integer>();
...
int size = list.size();
for (Integer i : list) {
...
if (--size == 0) {
// Last item.
...
}
}
Modifier
Quoi qu'il en soit, comme l'a dit Tom Hawtin, il est parfois préférable d'utiliser la "vieille" syntaxe lorsque vous avez besoin d'obtenir les informations d'index actuelles, en utilisant une boucle for
ou la iterator
, comme tout ce que vous gagner lors de l'utilisation de la syntaxe Java5 sera perdu dans la boucle elle-même ...
for (int i = 0; i < list.size(); i++) {
...
if (i == (list.size() - 1)) {
// Last item...
}
}
ou
for (Iterator it = list.iterator(); it.hasNext(); ) {
...
if (!it.hasNext()) {
// Last item...
}
}
Parfois, il est préférable d'utiliser un itérateur.
(Apparemment, "85%" des demandes d'index dans la boucle chic est pour implémenter une méthode de jointure String
(dont vous pouvez facilement vous passer).)
L'API ne prend pas cela directement en charge. Vous pouvez utiliser la boucle for (int i ..) et count les éléments ou utiliser subLists (0, size - 1) et gérer explicitement le dernier élément:
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));
Ceci n'est utile que s'il n'introduit pas de redondance. Il fonctionne mieux que la version de comptage (après amortissement de la surcharge de sous-liste). (Juste au cas où vous vous soucieriez de la boxe de toute façon).
Vous pouvez également utiliser un objet d'intercommunication pour capturer la dernière valeur, puis faire quelque chose avec:
List<Integer> list = new ArrayList<Integer>();
Integer lastValue = null;
for (Integer i : list) {
// do stuff
lastValue = i;
}
// do stuff with last value