web-dev-qa-db-fra.com

Java Foreach avec une condition

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?

23
TJ-

Non.

Vous pouvez utiliser une boucle while à la place.

Iterator iterator = list.iterator();
while(iterator.hasNext()) {
    ...
}
19
NimChimpsky

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;
   }
}
11
Michael Borgwardt

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.

8
Chandra Sekhar

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
}
1
Bob Yoplait

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");
}
1
michid

Dans Java 8, vous pouvez le faire. Par exemple :

foos.forEach(foo -> {
        if(try) {
          --your code--
        }
    });
0
Shubham A.