在Java中将 Iterator 转换为 Iterable
给定一个迭代器,任务是将其转换为Java中的 Iterables。
例子:
Input: Iterator = {1, 2, 3, 4, 5}
Output: {1, 2, 3, 4, 5}
Input: Iterator = {'G', 'e', 'e', 'k', 's'}
Output: {'G', 'e', 'e', 'k', 's'}
以下是执行此操作的各种方法:
- 通过覆盖抽象方法 Iterable.iterator() :
- 获取迭代器。
- 覆盖 Iterable.iterator() 方法并获取可迭代对象。
- 返回可迭代对象。
下面是上述方法的实现:
// Java program to get a Iterable // from a given Iterator import java.util.*; class GFG { // Function to get the Spliterator public static
Iterable getIterableFromIterator(Iterator iterator) { return new Iterable () { @Override public Iterator iterator() { return iterator; } }; } // Driver code public static void main(String[] args) { // Get the Iterator Iterator iterator = Arrays.asList(1, 2, 3, 4, 5) .iterator(); // Get the Iterable from the Iterator Iterable iterable = getIterableFromIterator(iterator); // Print the elements of Iterable iterable.forEach(System.out::println); } } 输出:1 2 3 4 5
- 使用Java 8 lambda 表达式:
- 获取迭代器。
- 使用 Lambda 表达式将迭代器转换为可迭代。
- 返回可迭代对象。
下面是上述方法的实现:
// Java program to get an Iterable // from a given Iterator import java.util.*; class GFG { // Function to get the Spliterator public static
Iterable getIterableFromIterator(Iterator iterator) { return () -> iterator; } // Driver code public static void main(String[] args) { // Get the Iterator Iterator iterator = Arrays.asList(1, 2, 3, 4, 5) .iterator(); // Get the Iterable from the Iterator Iterable iterable = getIterableFromIterator(iterator); // Print the elements of Iterable iterable.forEach(System.out::println); } } 输出:1 2 3 4 5
- 使用拆分器:
- 获取迭代器。
- 使用 Spliterators.spliteratorUnknownSize() 方法将迭代器转换为 Spliterator。
- 使用 StreamSupport.stream() 方法将 Spliterator 转换为顺序流。
- 使用 collect() 方法将顺序流的元素收集为 Iterable。
- 返回可迭代对象。
下面是上述方法的实现:
// Java program to get a Iterable // from a given Iterator import java.util.*; import java.util.stream.Collectors; import java.util.stream.StreamSupport; class GFG { // Function to get the Spliterator public static
Iterable getIterableFromIterator(Iterator iterator) { return StreamSupport // Convert the iterator into a Spliterator // and then into a sequential stream .stream(Spliterators.spliteratorUnknownSize(iterator, 0), false) // Convert the stream to an iterable .collect(Collectors.toList()); } // Driver code public static void main(String[] args) { // Get the Iterator Iterator iterator = Arrays.asList(1, 2, 3, 4, 5) .iterator(); // Get the Iterable from the Iterator Iterable iterable = getIterableFromIterator(iterator); // Print the elements of Iterable iterable.forEach(System.out::println); } } 输出:1 2 3 4 5