2012-03-30 11 views
15

Ich frage mich, ob es so eine Möglichkeit gibt, durch mehrere Sammlungen mit dem erweiterten für jede Schleife in Java zu iterieren.Iterieren durch mehrere Sammlungen in der gleichen "for" -Schleife?

So etwas wie:

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

Dank

+1

haben Sie es versucht? – ControlAltDel

+2

Was ist die Semantik davon? Alles von Sammlung1, dann Sammlung2? Oder zuerst alle Sammlungen, dann die zweite aller Sammlungen ... – Wolfgang

+2

@ user1291492 Das ist natürlich ein Syntaxfehler. Also müsste es "etwas anderes" sein. –

Antwort

20

Sie können genau das tun dies mit Guava ‚s Iterables.concat():

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

Das funktioniert super! Vielen Dank. –

+0

Es ist überraschend, dass Java keine CompositeCollection oder ähnliches bereitstellt. – Raedwald

+0

@Raedwald tut es ziemlich, mit 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

Das macht eine Kopie. (was ich nicht möchte, weil das Speicherverbrauch erhöhen würde) –

1

Wenn Ihre Listen die gleiche Länge haben, nur Verwenden Sie die rohe for Schleife:

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

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

Es funktioniert!

Verwandte Themen