2012-03-30 73 views
15

我不知道是否有这样一种方法来迭代通过Java的每个循环扩展多个集合。在同一个“for”循环中遍历多个集合?

因此,像:

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

感谢

+1

你试过了吗? – ControlAltDel 2012-03-30 19:05:17

+2

那是什么语义?所有的collection1,然后collection2?或者首先是所有集合,然后是所有集合中的第二个...... – Wolfgang 2012-03-30 19:08:57

+2

@ user1291492当然,这是一个语法错误。所以它必须是“不同的东西”。 – 2012-03-30 19:09:51

回答

20

你可以做的正是这跟的Iterables.concat()Guava

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

这很好用!谢谢。 – 2012-03-30 20:35:24

+0

Java不提供CompositeCollection或类似的东西是令人惊讶的。 – Raedwald 2016-04-16 12:41:03

+0

@Raedwald与Streams差不多。 – 2016-04-16 15:23:56

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

这是做一个副本。 (这不是我想要的,因为这会增加内存使用量) – 2015-02-12 18:53:04

1

如果你的列表的长度相同,只是使用原始for循环:

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

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

它的工作原理!