2012-03-30 15 views
15

Me pregunto si hay una manera de iterar a través de varias colecciones con la extendida para cada lazo en Java.¿Iterar a través de múltiples colecciones en el mismo bucle "for"?

Así que algo como:

for (Object element : collection1, collection2, ....) 
     // do something ... 

Gracias

+1

has probado? – ControlAltDel

+2

¿Cuál es la semántica de eso? ¿Todo de collection1, luego collection2? O primero colecciones, luego la segunda de todas las colecciones ... – Wolfgang

+2

@ user1291492 Eso es un error de sintaxis, por supuesto. Entonces tendría que ser "algo diferente". –

Respuesta

20

Puede hacer exactamente esto con Guava 's Iterables.concat():

for (Foo element : Iterables.concat(collection1, collection2)) { 
    foo.frob(); 
} 
+0

¡Esto funciona genial! Gracias. –

+0

Es sorprendente que Java no proporcione una CompositeCollection, o algo así. – Raedwald

+0

@Raedwald es bastante, con Streams. –

2
Collection<Foo> collection1 = ... 
Collection<Foo> collection2 = ... 
Collection<Foo> collection3 = ... 
... 

Collection<Foo> all = ... 
all.addAll(collection1); 
all.addAll(collection2); 
all.addAll(collection3); 
... 

for(Foo element : all) 
{ 

} 
+1

Esto está haciendo una copia. (que no es lo que me gustaría porque aumentaría el uso de la memoria) –

1

Si las listas tienen la misma longitud, simplemente use el lazo for crudo:

Object[] aNum = {1, 2}; 
Object[] aStr = {"1", "2"}; 

for (int i = 0; i < aNum.length; i++) { 
    doSomeThing(aNum[i]); 
    doSomeThing(aStr[i]); 
} 

Funciona!

Cuestiones relacionadas