Open In App

Convert Iterator to Iterable in Java

Improve
Improve
Like Article
Like
Save
Share
Report

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():
    1. Get the Iterator.
    2. Override the Iterable.iterator() method and get the iterable.
    3. Return the Iterable.

    Below is the implementation of the above approach:




    // 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);
        }
    }

    
    

    Output:

    1
    2
    3
    4
    5
    
  • Using Java 8 lambda expression:
    1. Get the Iterator.
    2. Convert the iterator to iterable using Lambda Expression.
    3. Return the Iterable.

    Below is the implementation of the above approach:




    // 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);
        }
    }

    
    

    Output:

    1
    2
    3
    4
    5
    
  • Using Spliterators:
    1. Get the Iterator.
    2. Convert the iterator to Spliterator using Spliterators.spliteratorUnknownSize() method.
    3. Convert the Spliterator into Sequential Stream using StreamSupport.stream() method.
    4. Collect the elements of the Sequential Stream as an Iterable using collect() method.
    5. Return the Iterable.

    Below is the implementation of the above approach:




    // 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);
        }
    }

    
    

    Output:

    1
    2
    3
    4
    5
    


Last Updated : 10 Nov, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads