有没有一种简单的方法可以将迭代器复制到Java中的列表中?

Bjö*_*lex 7 java iterator copy list

我想要这样的东西:

public void CopyIteratorIntoList(Iterator<Foo> fooIterator) {
    List<Foo> fooList = new ArrayList<Foo>();
    fooList.addAll(fooIterator);
}
Run Code Online (Sandbox Code Playgroud)

这相当于:

public void CopyIteratorIntoList(Iterator<Foo> fooIterator) {
    List<Foo> fooList = new ArrayList<Foo>();
    while(fooIterator.hasNext())
        fooList.add(fooIterator.next());
}
Run Code Online (Sandbox Code Playgroud)

API中是否有任何方法可以实现,或者这是唯一的方法吗?

Mic*_*rdt 11

不,标准API中没有类似的东西.

在Java中,将其Iterator用作API的一部分并不是惯用的(因此相当罕见); 它们通常是生产并立即消费的.


Car*_*arl 7

不,但Google Collections库有一个很好的方法(如果你将使用它的一些其他功能 - 没有理由为此添加该依赖):

Iterators.addAll(targetCollection, sourceIterator);
Run Code Online (Sandbox Code Playgroud)


Cow*_*wan 7

Guava(谷歌新的通用Java库,取代google-collections)中,这可能很简单:

return Lists.newArrayList(fooIterator);
Run Code Online (Sandbox Code Playgroud)

或者如果列表是只读的:

return ImmutableList.copyOf(fooIterator);
Run Code Online (Sandbox Code Playgroud)