Convert an Iterator to a List in Java

2025 年 5 月 7 日 | 阅读 3 分钟

在将迭代器转换为列表时,开发人员可以利用 List 接口提供的强大技术,从而在顺序遍历和功能齐全的集合操作之间架起桥梁。与迭代器相比,列表是一种更灵活的数据结构。除了迭代器无法直接处理的排序和过滤等操作外,它还允许随机访问和更新。

以下情况使此转换非常有用

  • 数据必须有多种用途。
  • 需要更复杂的进程,例如排序、过滤或映射。
  • 我们希望将数据提供给要求特定列表的 API方法

尽管 Java 没有直接的机制来实现这一点,但可以通过迭代 Iterator 并将其元素添加到 List 中来轻松完成转换。

示例 1

输入

Iterator = {10, 20, 30, 40}

输出

List = [10, 20, 30, 40]

解释

从包含 整数 的输入迭代器创建了一个列表。

示例 2

输入

Iterator = {"apple", "banana", "cherry"}

输出

List = ["apple", "banana", "cherry"]

解释

从包含字符串元素的迭代器创建了一个包含相同元素且顺序相同的列表。

示例 3

输入

Iterator = {'a', 'b', 'c', 'd'}

输出

List = ['a', 'b', 'c', 'd']

解释

将迭代器中的字符添加到列表时,保持了相同的顺序。

方法:朴素方法

代码通过使用泛型编程(<T>)支持 Iterator 和 List 的任何数据类型。它利用 Iterator 的 forEachRemaining 方法,该方法提供了一种简洁的技巧来处理所有剩余元素,并使用 ArrayList 进行动态存储。使用 lambda 表达式(l::add)确保了函数式编程方法。主方法展示了如何直接从数组支持的列表中初始化 Iterator,同时保持类型安全,并演示了 Java 的集合系统是如何互操作的。由于代码是模块化的,执行逻辑和实用功能保持独立。

实施

文件名: IteratortoList.java

输出

 
The List = [1, 2, 3, 4, 5]   

方法:使用 Iterable 作为中间项

此代码使用 Java 的 StreamSupport 类和函数式编程技术将迭代器转换为列表。通过使用 lambda 表达式定义一个 Iterable 对象,它连接了 Iterator 和 stream 功能。StreamSupport.stream() 方法将可迭代对象的 spliterator 转换为流,然后使用 Collectors.toList() 对流进行进一步处理并收集到 List 中。为了提供类型安全和跨数据类型的可重用性,使用了泛型(<T>)。遵循标准实践,模块化设计将主方法的执行与实用逻辑(getListFromIterator)分离开来。

实施

文件名: IteratorAsIntermediate.java

输出

 
The List = [1, 2, 3, 4, 5]   

下一个主题Javac 命令未找到