Java 把Iterator转换为Iterable
给定一个Iterator,任务是在Java中把它转换成Iterables。
例子。
输入: Iterator = {1, 2, 3, 4, 5}
输出: {1, 2, 3, 4, 5}
输入: Iterator = {‘G’, ‘e’, ‘e’, ‘k’, ‘s’}
输出: {‘G’, ‘e’, ‘e’, ‘k’, ‘s’}
以下是各种方法。
- 通过重写抽象方法Iterable.iterator()。
- 获取迭代器。
- 覆盖Iterable.iterator()方法并获得迭代器。
- 返回Iterable。
下面是上述方法的实现。
// Java program to get a Iterable
// from a given Iterator
import java.util.*;
class GFG {
// Function to get the Spliterator
public static <T> Iterable<T>
getIterableFromIterator(Iterator<T> iterator)
{
return new Iterable<T>() {
@Override
public Iterator<T> iterator()
{
return iterator;
}
};
}
// Driver code
public static void main(String[] args)
{
// Get the Iterator
Iterator<Integer>
iterator = Arrays.asList(1, 2, 3, 4, 5)
.iterator();
// Get the Iterable from the Iterator
Iterable<Integer>
iterable = getIterableFromIterator(iterator);
// Print the elements of Iterable
iterable.forEach(System.out::println);
}
}
输出:
1
2
3
4
5
- 使用Java 8 lambda表达式。
- 获取迭代器。
- 使用Lambda表达式将迭代器转换为可迭代器。
- 返回Iterable。
下面是上述方法的实现。
// Java program to get an Iterable
// from a given Iterator
import java.util.*;
class GFG {
// Function to get the Spliterator
public static <T> Iterable<T>
getIterableFromIterator(Iterator<T> iterator)
{
return () -> iterator;
}
// Driver code
public static void main(String[] args)
{
// Get the Iterator
Iterator<Integer>
iterator = Arrays.asList(1, 2, 3, 4, 5)
.iterator();
// Get the Iterable from the Iterator
Iterable<Integer>
iterable = getIterableFromIterator(iterator);
// Print the elements of Iterable
iterable.forEach(System.out::println);
}
}
输出:
1
2
3
4
5
- 使用分裂器:
- 获取迭代器。
- 使用Spliterators.splitatorUnknownSize()方法将迭代器转换为Spliterator。
- 使用StreamSupport.stream()方法将Spliterator转换成顺序流。
- 使用collect()方法将序列流的元素收集为一个Iterable。
- 返回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 <T> Iterable<T>
getIterableFromIterator(Iterator<T> 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<Integer>
iterator = Arrays.asList(1, 2, 3, 4, 5)
.iterator();
// Get the Iterable from the Iterator
Iterable<Integer>
iterable = getIterableFromIterator(iterator);
// Print the elements of Iterable
iterable.forEach(System.out::println);
}
}
输出:
1
2
3
4
5