2012-03-30 39 views
15

Tôi tự hỏi nếu có một cách để lặp lại qua nhiều bộ sưu tập với mở rộng cho mỗi vòng lặp trong java.Lặp lại qua nhiều bộ sưu tập trong cùng một vòng lặp "for"?

Vì vậy, một cái gì đó như:

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

Cảm ơn

+1

bạn đã thử chưa? – ControlAltDel

+2

Ngữ nghĩa của điều đó là gì? Tất cả collection1, sau đó là collection2? Hoặc đầu tiên của tất cả các bộ sưu tập, sau đó thứ hai của tất cả các bộ sưu tập ... – Wolfgang

+2

@ user1291492 Đó là một lỗi cú pháp, tất nhiên. Vì vậy, nó sẽ phải là "một cái gì đó khác nhau". –

Trả lời

20

Bạn có thể thực hiện chính xác này với Guava 's Iterables.concat():

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

Công trình này tuyệt vời! Cảm ơn. –

+0

Thật đáng ngạc nhiên là Java không cung cấp một CompositeCollection, hoặc một cái gì đó như thế này. – Raedwald

+0

@Raedwald nó khá nhiều, với 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

Điều này đang thực hiện một bản sao. (đó không phải là điều tôi muốn vì điều đó sẽ làm tăng mức sử dụng bộ nhớ) –

1

Nếu danh sách của bạn có cùng độ dài, chỉ cần sử dụng vòng lặp for thô:

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

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

Nó hoạt động!

Các vấn đề liên quan