Skip to content
Related Articles

Related Articles

Improve Article

Convert Iterator to Iterable in Java

  • Last Updated : 23 Oct, 2018
Geek Week

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 Splietrator 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
    

Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.




My Personal Notes arrow_drop_up
Recommended Articles
Page :