在同一“for”循环中循环访问多个集合?

2022-09-02 12:49:16

我想知道是否有这样一种方法可以迭代多个集合,并在java中的每个循环进行扩展。

所以像这样:

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

谢谢


答案 1

你可以用GuavaIterables.concat()做到这一点

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

答案 2

使用普通的Java 8并且没有任何其他库:

public static <T> Iterable<T> compositeIterable(Collection<? extends T>... collections)
{
    Stream<T> compositeStream = Stream.of(collections).flatMap(c-> c.stream());
    return compositeStream::iterator;
}

然后,您可以将其用作:

for (Foo element : MyClass.compositeIterable(collection1, collection2)) {
    foo.frob();
}