Java 把一个迭代器转换成一个列表
给定一个Iterator,任务是在Java中把它转换成List。
例子。
输入: Iterator = {1, 2, 3, 4, 5}
输出: {1, 2, 3, 4, 5}
输入: Iterator = {‘G’, ‘e’, ‘e’, ‘k’, ‘s’}
输出: {‘G’, ‘e’, ‘e’, ‘k’, ‘s’}
以下是各种方法。
- Naive 方法 :
- 获取迭代器。
- 创建一个空列表。
- 使用forEachRemaining()方法将迭代器的每个元素添加到列表中。
- 返回该列表。
下面是上述方法的实现。
// Java program to get a List
// from a given Iterator
import java.util.*;
class GFG {
// Function to get the List
public static <T> List<T>
getListFromIterator(Iterator<T> iterator)
{
// Create an empty list
List<T> list = new ArrayList<>();
// Add each element of iterator to the List
iterator.forEachRemaining(list::add);
// Return the List
return list;
}
// Driver code
public static void main(String[] args)
{
// Get the Iterator
Iterator<Integer>
iterator = Arrays.asList(1, 2, 3, 4, 5)
.iterator();
// Get the List from the Iterator
List<Integer>
list = getListFromIterator(iterator);
// Print the list
System.out.println(list);
}
}
输出:
[1, 2, 3, 4, 5]
- 使用Iterable作为中间环节。
- 获取Iterator。
- 使用lambda表达式将迭代器转换为可迭代器。
- 使用Stream将可迭代器转换为列表。
- 返回该列表。
下面是上述方法的实现。
// Java program to get a List
// from a given Iterator
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
class GFG {
// Function to get the List
public static <T> List<T>
getListFromIterator(Iterator<T> iterator)
{
// Convert iterator to iterable
Iterable<T> iterable = () -> iterator;
// Create a List from the Iterable
List<T> list = StreamSupport
.stream(iterable.spliterator(), false)
.collect(Collectors.toList());
// Return the List
return list;
}
// Driver code
public static void main(String[] args)
{
// Get the Iterator
Iterator<Integer>
iterator = Arrays.asList(1, 2, 3, 4, 5)
.iterator();
// Get the List from the Iterator
List<Integer>
list = getListFromIterator(iterator);
// Print the list
System.out.println(list);
}
}
输出:
[1, 2, 3, 4, 5]