2012-04-11 26 views
20

¿Es posible que Java foreach tenga condiciones?Java Foreach con una condición

Por ejemplo,

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

¿Hay un equivalente a este, de modo que puedo poner una condición AND dentro for?

+0

Para más información, puede tomar una mira http://stackoverflow.com/a/3433775/197574 – DerMike

+0

\ @anyone, por favor hazme ping cuando haya una lib disponible. ¡Muchas gracias de antemano! –

Respuesta

16

En su lugar, podría usar un bucle while.

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

probablemente min^infinity minifies min. –

+2

-1 try es una palabra clave, tendrá error de compilación .. –

+6

@NandKumarTekale - ese no es el problema de Nim; él va por lo que escribió el OP. – JoshDM

8

No, foreach está especialmente diseñado sólo para la iteración de todos los elementos de una matriz o colección.

Si lo desea, puede verificar la condición dentro de él y usar romper palabra clave para salir del bucle en el centro.

10

No, no hay nada como eso. El "bucle forzado mejorado" es una construcción completamente separada que no hace nada excepto lopp a través del iterador devuelto por su parámetro Iterable.

Lo que puede hacer es lo siguiente:

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

Supongo que foreach no es tan elegante después de todo. –

+0

Es una herramienta para cierto tipo de tareas. – DerMike

+0

@ TJ-: En realidad, diría que hacer una cosa solo la hace * más * elegante. El bucle de tipo C que agrupa la iteración, la inicialización y las condiciones arbitrarias complejas y los pasos de iteración en un solo constructo superpoderoso, solo para ser utilizado exactamente de la misma forma el 95% de los casos * que * es terriblemente poco elegante. –

0

En Java 8, que puede hacerlo. Por ejemplo:

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

Demasiado fácil proporcionar un -1 sin ninguna explicación. –

+0

porque simplemente pones la condición dentro del cuerpo del lazo. En Java 8, a la pregunta original le gustará: ¿Es posible que Java 8 foreach tenga condiciones? Por ejemplo: 'foos.forEach (try, foo -> {--sour code-- });', donde 'try' es Predicado. – foal

0

Lo más cercano que puede obtener es, probablemente, a un filtrado del iterable inicial:

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

Cuando el método de filtro devuelve un iterable que contiene solamente aquellos elementos para los que su condición se cumple. Por ejemplo, con guayaba podría escribir el método de filtro de la siguiente manera:

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

fines de cada uno no puede tener condiciones, aquí es el equivalente a lo que pidieron:

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