2012-04-11 10 views
20

È possibile che Java abbia condizioni?Java Foreach con una condizione

Per esempio,

for(Foo foo : foos && try == true) 
{ 
//Do something 
} 

Esiste un equivalente a questo, in modo che posso mettere una condizione AND all'interno for?

+0

Per ulteriori informazioni si può prendere un guarda http://stackoverflow.com/a/3433775/197574 – DerMike

+0

\ @anyone, per favore ping me quando una lib è disponibile. Grazie mille in anticipo! –

risposta

16

No.

È possibile utilizzare invece un ciclo while.

Iterator iterator = list.iterator(); 
while(iterator.hasNext()) { 
    ... 
} 
+0

probabilmente min^infinito minifica min. –

+2

-1 provare è una parola chiave, si avrà errore del compilatore .. –

+6

@NandKumarTekale - questo non è il problema di Nim; sta passando per quello che l'OP ha scritto. – JoshDM

8

No, foreach è appositamente progettato solo per l'iterazione tutti gli elementi di una matrice o di raccolta.

Se si desidera è possibile controllare le condizioni al suo interno e utilizzare interruzione parola chiave per uscire dal ciclo in mezzo.

10

No, non c'è niente del genere. Il "enhanced for loop" è un costrutto completamente separato che non fa altro che loppare attraverso l'iteratore restituito dal suo parametro Iterable.

Che cosa si può fare è questo:

for(Foo foo : foos) 
{ 
    //Do something 
    if(!condition){ 
     break; 
    } 
} 
+0

ipotesi foreach non è poi così elegante. –

+0

È uno strumento per un certo tipo di attività. – DerMike

+0

@ TJ-: In realtà, direi che fare una cosa lo rende * più * elegante. Il ciclo C-like for che annulla iterazione, inizializzazione e condizioni arbitrariamente complesse e passaggi di iterazione insieme in un costrutto superpotente, solo per essere usato esattamente nello stesso modo in cui il 95% dei casi * è * orribilmente inelegante. –

0

In Java 8, si può farlo. Per esempio:

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

Troppo facile fornire un -1 senza alcuna spiegazione. –

+0

perché hai inserito la condizione all'interno del corpo del loop. In Java 8 la domanda originale piacerà: è possibile che Java 8 abbia condizioni? Ad esempio: 'foos.forEach (prova, foo -> {--il tuo codice-- });', dove 'try' è Predicato. – foal

0

La cosa più vicina si può ottenere è probabilmente quello di filtrare l'iterabile iniziale:

for(Foo foo : filter(foos)) { 
    //Do something 
} 

Dove il metodo del filtro restituisce un iterabile contenente solo gli elementi per i quali la sua condizione detiene. Ad esempio, con Guava si potrebbe scrivere il metodo del filtro in questo modo:

Iterable<String> filter(Iterable<String> foos) { 
    return Iterables.filter(foos, 
      input -> input.equals("whatever"); 
} 
1

for-each non possono avere le condizioni, qui è l'equivalente di quello che hai chiesto:

Iterator<Foo> iterator = foos.iterator(); 
while(iterator.hasNext() && condition == true) { 
    //Do something 
}