Est-il possible que Java foreach ait des conditions?
Par exemple,
for(Foo foo : foos && try == true)
{
//Do something
}
Y a-t-il un équivalent à ceci, de sorte que je puisse mettre une condition AND dans for
?
Non.
Vous pouvez utiliser une boucle while à la place.
Iterator iterator = list.iterator();
while(iterator.hasNext()) {
...
}
Non, il n'y a rien comme ça. La boucle "améliorée pour" est une construction complètement distincte qui ne fait rien sauf un lopp via l'itérateur renvoyé par son paramètre Iterable
.
Voici ce que vous pouvez faire:
for(Foo foo : foos)
{
//Do something
if(!condition){
break;
}
}
Non, foreach est spécialement conçu pour itérer tous les éléments d'un tableau ou d'une collection.
Si vous le souhaitez, vous pouvez vérifier la condition à l'intérieur et utiliser break mot-clé pour sortir de la boucle au milieu.
pour-chacun ne peut pas avoir de conditions, voici l'équivalent de ce que vous avez demandé:
Iterator<Foo> iterator = foos.iterator();
while(iterator.hasNext() && condition == true) {
//Do something
}
La chose la plus proche que vous puissiez obtenir est probablement de filtrer l'itéré initial:
for(Foo foo : filter(foos)) {
//Do something
}
Où la méthode de filtrage renvoie un élément itérable contenant uniquement les éléments pour lesquels votre condition est vérifiée. Par exemple avec Guava, vous pouvez écrire la méthode de filtrage comme ceci:
Iterable<String> filter(Iterable<String> foos) {
return Iterables.filter(foos,
input -> input.equals("whatever");
}
Dans Java 8
, vous pouvez le faire. Par exemple :
foos.forEach(foo -> {
if(try) {
--your code--
}
});