如何在Java中获取迭代器的集合?

H2O*_*aCl 1 java iterator apache-commons

通常需要设置一个ArrayList<>.其中一个构造函数采用集合,但没有构造函数采用迭代器.

如果我有一个迭代器怎么办?有没有办法"伸手"到提供迭代器的集合才能使用ArrayList<>构造函数?
具体来说,我有org.apache.com的PropertiesConfiguration.getKeys()一部分提供的迭代器.

Bru*_*eis 11

没有这样的事,IteratorCollection.可以独立于a创建迭代器Collection.它可以从任何地方获得Iterable,或者你甚至可以创建一个实现迭代器的类.

但是,您可以获取ArrayListIterator通过迭代,并通过一个增加它的元素之一:

Iterator<X> it = ...;
List<X> list = new ArrayList<X>();
while (it.hasNext()) {
  list.add(it.next());
}
Run Code Online (Sandbox Code Playgroud)

但请注意,对于每个可能的迭代器都无法可靠地完成此操作,因为迭代器可能会永远迭代,从而导致无限循环,最可能是一个OutOfMemoryError.

我建议你看看Google Guava,一个来自谷歌的实用工具库.它有一个名为Lists的类,它允许您执行以下操作:

Iterator<X> it = ...;
List<X> list = Lists.newArrayList(it);
Run Code Online (Sandbox Code Playgroud)

该库有许多方法对日常Java编码非常有用.它主要包含您想要的所有内容,但在标准Java 6 API中找不到.