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

标签 java iterator apache-commons

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

如果我有一个迭代器怎么办?有没有办法“到达”提供迭代器的集合以便使用 ArrayList<>构造函数?
具体来说,我有 PropertiesConfiguration.getKeys() 提供的迭代器这是 org.apache.commons 的一部分.

最佳答案

没有这样的东西,IteratorCollection。迭代器可以独立于 Collection 创建。它可以从任何 Iterable 获得,或者您甚至可以创建一个实现迭代器的类。

但是,您可以从 Iterator 中获取一个 ArrayList,方法是迭代它并一个一个地添加它的元素:

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

但是请注意,这不能对每个可能的迭代器都可靠地完成,因为迭代器有可能永远迭代,从而导致无限循环,很可能导致 OutOfMemoryError

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

Iterator<X> it = ...;
List<X> list = Lists.newArrayList(it);

这个库有大量的方法对日常 Java 编码非常有用。它包含了您想要但在标准 Java 6 API 中找不到的大部分内容。

关于java - 如何在 Java 中获取迭代器的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6971318/

相关文章:

java - 抽象类实现接口(interface),接口(interface)方法的实现是否可以决定子类扩展抽象父类(super class)?

java - 为什么在 Java 中会出现 NoClassDefFoundError 异常?

迭代器上的 Angular 循环

c++ - 我需要学习这些用 C++ 编写的代码

C++ STL : Which method of iteration over a STL container is better?

java - 添加 ByteArrayOutputStreams

java - Intent 另一个布局的运行时错误

java - StackOverflowError 由 TableModelListener 引起

jboss7.x - 无法编码 EJB 参数 --- IllegalArgumentException : Can not set org. apache.commons.collections.FastHashMap 字段

java - SonarQube 与 Apache Commons Lang3 中的 Validate 类