Convert Iterator to Iterable in Java

Given an Iterator, the task is to convert it into Iterables in Java.
Examples:
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'}
Below are the various ways to do so:
- By overriding the abstract method Iterable.iterator():
- Get the Iterator.
- Override the Iterable.iterator() method and get the iterable.
- Return the Iterable.
Below is the implementation of the above approach:
// Java program to get a Iterable// from a given Iteratorimportjava.util.*;classGFG {// Function to get the Spliteratorpublicstatic<T> Iterable<T>getIterableFromIterator(Iterator<T> iterator){returnnewIterable<T>() {@OverridepublicIterator<T> iterator(){returniterator;}};}// Driver codepublicstaticvoidmain(String[] args){// Get the IteratorIterator<Integer>iterator = Arrays.asList(1,2,3,4,5).iterator();// Get the Iterable from the IteratorIterable<Integer>iterable = getIterableFromIterator(iterator);// Print the elements of Iterableiterable.forEach(System.out::println);}}Output:1 2 3 4 5
- Using Java 8 lambda expression:
- Get the Iterator.
- Convert the iterator to iterable using Lambda Expression.
- Return the Iterable.
Below is the implementation of the above approach:
// Java program to get an Iterable// from a given Iteratorimportjava.util.*;classGFG {// Function to get the Spliteratorpublicstatic<T> Iterable<T>getIterableFromIterator(Iterator<T> iterator){return() -> iterator;}// Driver codepublicstaticvoidmain(String[] args){// Get the IteratorIterator<Integer>iterator = Arrays.asList(1,2,3,4,5).iterator();// Get the Iterable from the IteratorIterable<Integer>iterable = getIterableFromIterator(iterator);// Print the elements of Iterableiterable.forEach(System.out::println);}}Output:1 2 3 4 5
- Using Spliterators:
- Get the Iterator.
- Convert the iterator to Spliterator using Spliterators.spliteratorUnknownSize() method.
- Convert the Spliterator into Sequential Stream using StreamSupport.stream() method.
- Collect the elements of the Sequential Stream as an Iterable using collect() method.
- Return the Iterable.
Below is the implementation of the above approach:
// Java program to get a Iterable// from a given Iteratorimportjava.util.*;importjava.util.stream.Collectors;importjava.util.stream.StreamSupport;classGFG {// Function to get the Spliteratorpublicstatic<T> Iterable<T>getIterableFromIterator(Iterator<T> iterator){returnStreamSupport// 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 codepublicstaticvoidmain(String[] args){// Get the IteratorIterator<Integer>iterator = Arrays.asList(1,2,3,4,5).iterator();// Get the Iterable from the IteratorIterable<Integer>iterable = getIterableFromIterator(iterator);// Print the elements of Iterableiterable.forEach(System.out::println);}}Output:1 2 3 4 5



