Open In App

Convert an Iterator to a List in Java

Last Updated : 11 Dec, 2018
Improve
Improve
Like Article
Like
Save
Share
Report

Given an Iterator, the task is to convert it into List 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:

  • Naive Approach:
    1. Get the Iterator.
    2. Create an empty list.
    3. Add each element of the iterator to the list using forEachRemaining() method.
    4. Return the list.

    Below is the implementation of the above approach:




    // Java program to get a List
    // from a given Iterator
      
    import java.util.*;
      
    class GFG {
      
        // Function to get the List
        public static <T> List<T>
        getListFromIterator(Iterator<T> iterator)
        {
      
            // Create an empty list
            List<T> list = new ArrayList<>();
      
            // Add each element of iterator to the List
            iterator.forEachRemaining(list::add);
      
            // Return the List
            return list;
        }
      
        // Driver code
        public static void main(String[] args)
        {
      
            // Get the Iterator
            Iterator<Integer>
                iterator = Arrays.asList(1, 2, 3, 4, 5)
                               .iterator();
      
            // Get the List from the Iterator
            List<Integer>
                list = getListFromIterator(iterator);
      
            // Print the list
            System.out.println(list);
        }
    }

    
    

    Output:

    [1, 2, 3, 4, 5]
    
  • Using Iterable as intermediate:
    1. Get the Iterator.
    2. Convert the iterator to iterable using lambda expression.
    3. Convert the iterable to list using Stream.
    4. Return the list.

    Below is the implementation of the above approach:




    // Java program to get a List
    // from a given Iterator
      
    import java.util.*;
    import java.util.stream.Collectors;
    import java.util.stream.StreamSupport;
      
    class GFG {
      
        // Function to get the List
        public static <T> List<T>
        getListFromIterator(Iterator<T> iterator)
        {
      
            // Convert iterator to iterable
            Iterable<T> iterable = () -> iterator;
      
            // Create a List from the Iterable
            List<T> list = StreamSupport
                               .stream(iterable.spliterator(), false)
                               .collect(Collectors.toList());
      
            // Return the List
            return list;
        }
      
        // Driver code
        public static void main(String[] args)
        {
      
            // Get the Iterator
            Iterator<Integer>
                iterator = Arrays.asList(1, 2, 3, 4, 5)
                               .iterator();
      
            // Get the List from the Iterator
            List<Integer>
                list = getListFromIterator(iterator);
      
            // Print the list
            System.out.println(list);
        }
    }

    
    

    Output:

    [1, 2, 3, 4, 5]
    


Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads