当前位置: 首页 > 知识库问答 >
问题:

将迭代器转换为列表

廖臻
2023-03-14

给定迭代器


共有3个答案

督飞羽
2023-03-14

您可以将迭代器复制到新列表,如下所示:

Iterator<String> iter = list.iterator();
List<String> copy = new ArrayList<String>();
while (iter.hasNext())
    copy.add(iter.next());

这是假设列表包含字符串。真的没有更快的方法从迭代器重新创建列表,您只能手工遍历它,并将每个元素复制到适当类型的新列表中。

编辑:

以下是一种以类型安全方式将迭代器复制到新列表的通用方法:

public static <T> List<T> copyIterator(Iterator<T> iter) {
    List<T> copy = new ArrayList<T>();
    while (iter.hasNext())
        copy.add(iter.next());
    return copy;
}

像这样使用它:

List<String> list = Arrays.asList("1", "2", "3");
Iterator<String> iter = list.iterator();
List<String> copy = copyIterator(iter);
System.out.println(copy);
> [1, 2, 3]
邓开济
2023-03-14

在Java 8中,您可以使用添加到迭代器接口的新forEachRemaining方法:

List<Element> list = new ArrayList<>();
iterator.forEachRemaining(list::add);
邢华清
2023-03-14

最好使用番石榴这样的图书馆:

import com.google.common.collect.Lists;

Iterator<Element> myIterator = ... //some iterator
List<Element> myList = Lists.newArrayList(myIterator);

另一个番石榴例子:

ImmutableList.copyOf(myIterator);

或Apache共享资源集合

import org.apache.commons.collections.IteratorUtils;

Iterator<Element> myIterator = ...//some iterator

List<Element> myList = IteratorUtils.toList(myIterator);       
 类似资料:
  • 我的linter建议我使用lambda表达式重构它,但我不知道如何对这段代码进行重构

  • 问题内容: 有一个对象,是否有比列表理解更快,更好或更正确的方法来获取迭代器返回的对象的列表? 问题答案:

  • 我正在寻找一种简洁的方法来将转换为或者更具体地说,将迭代器作为流“查看”。 出于性能原因,我希望避免在新列表中出现迭代器的副本: 基于评论中的一些建议,我还尝试使用: 但是,我得到一个(因为没有调用) 我查看了和,但没有找到任何东西。

  • 问题内容: 我正在寻找一种将a 转换为或更具体地以将“迭代器”作为流“查看”的简洁方法。 出于性能原因,我想避免在新列表中复制迭代器: 根据评论中的一些建议,我也尝试使用: 但是,我得到了(因为没有调用hasNext) 我已经看过和,但我没有发现任何东西。 问题答案: 一种方法是从迭代器创建一个拆分器,并将其用作流的基础: 一个可能更易读的替代方法是使用Iterable-使用lambda从Iter

  • 本文向大家介绍在Java中将迭代器Iterator转换为流Stream,包括了在Java中将迭代器Iterator转换为流Stream的使用技巧和注意事项,需要的朋友参考一下 首先,设置一个Interator- 现在,我们使用了流- 上面,方法convertIterator()用于转换。以下是方法- 示例 以下是在Java中将Iterator转换为Stream的程序- 输出结果

  • 假设您有一个类似数组的Javascript ES6 Iterable,您事先知道它的长度是有限的,将其转换为Javascript数组的最佳方法是什么? 这样做的原因是许多js库(如underscore和lodash)仅支持数组,因此如果您希望在可迭代上使用它们的任何函数,则必须首先将其转换为Array。 在python中,您可以只使用list()函数。ES6中是否有同等标准?