Java本身不支持此行爲。
如果你使用Google Guava那麼你可以這樣做:
for (final Rect rect : Iterables.concat(map1.values(), map2.values())) {
}
你也可以敲了一個快速的實用工具類。我在這裏使用了可變參數,以便使用更好;缺點是編譯器會拋出很多警告,因爲通用數組創建和可變參數方法未被選中。
public class CombinedIterable<T> implements Iterable<T> {
public static <T> Iterable<T> concat(Iterable<? extends T>... iterables) {
return new CombinedIterable<T>(iterables);
}
private final List<Iterable<? extends T>> iterables;
private CombinedIterable(Iterable<? extends T>... iterables) {
this.iterables = Arrays.asList(iterables);
}
@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
private final Iterator<Iterable<? extends T>> pos = iterables.iterator();
private Iterator<? extends T> iter = pos.next().iterator();
@Override
public boolean hasNext() {
if (iter.hasNext()) {
return true;
}
if (pos.hasNext()) {
iter = pos.next().iterator();
}
return iter.hasNext();
}
@Override
public T next() {
return iter.next();
}
@Override
public void remove() {
throw new UnsupportedOperationException("Not supported.");
}
};
}
}
用法是一樣的東西:
final List<String> s1 = Arrays.asList(new String[]{"A", "B", "C"});
final List<String> s2 = Arrays.asList(new String[]{"D", "E", "F"});
final List<String> s3 = Arrays.asList(new String[]{"H", "I", "J"});
for (final String s : CombinedIterable.concat(s1, s2, s3)) {
System.out.println(s);
}
而且隨着import static
for (final String s : concat(s1, s2, s3)) {
System.out.println(s);
}
如果你到那種事情的魔力......
的可能的複製http://stackoverflow.com/questions/3610261/is-it-possible-to-merge-iterators-in-java – zapl
是的,重複。關於該帖子的好消息。 – ilomambo