Convert an Iterable to Collection in Java

Iterable and Collection have served to be of great use in Java. Iterators are used in Collection framework in Java to retrieve elements one by one and a Collection is a group of individual objects represented as a single unit. Java provides Collection Framework which defines several classes and interfaces to represent a group of objects as a single unit.

But at certain times, it is required to switch from iterable to collection and vie versa. For more details on difference between Iterable and Collection, please refer to the post Iterator vs Collection in Java.

The conversion of Iterable to Collection can be carried out in following ways:

  1. Creating a utility function: Creating a utility function means creating a function that converts the iterable to a collection by explicitly taking each item into account. This also can be done in many ways as explained below:

    • Using For loop



      filter_none

      edit
      close

      play_arrow

      link
      brightness_4
      code

      // Below is the program to convert an Iterable
      // into a Collection using for loop
        
      import java.io.*;
      import java.util.*;
        
      class GFG {
          // function to convert Iterable into Collection
          public static <T> Collection<T> 
                         getCollectionFromIteralbe(Iterable<T> itr)
          {
              // Create an empty Collection to hold the result
              Collection<T> cltn = new ArrayList<T>();
        
              // Iterate through the iterable to
              // add each element into the collection
              for (T t : itr)
                  cltn.add(t);
        
              // Return the converted collection
              return cltn;
          }
        
          public static void main(String[] args)
          {
              Iterable<Integer> i = Arrays.asList(1, 2, 3, 4);
              System.out.println("Iterable List : " + i);
        
              Collection<Integer> cn = getCollectionFromIteralbe(i);
              System.out.println("Collection List : " + cn);
          }
      }

      chevron_right

      
      

      Output:

      Iterable List : [1, 2, 3, 4]
      Collection List : [1, 2, 3, 4]
      

    • Using Iterable.forEach():
      It can be used in Java 8 and above.

      filter_none

      edit
      close

      play_arrow

      link
      brightness_4
      code

      // Below is the program to convert an Iterable
      // into a Collection using iterable.forEach
        
      import java.io.*;
      import java.util.*;
        
      class GFG {
          // function to convert Iterable into Collection
          public static <T> Collection<T> 
                      getCollectionFromIteralbe(Iterable<T> itr)
          {
              // Create an empty Collection to hold the result
              Collection<T> cltn = new ArrayList<T>();
        
              // Use iterable.forEach() to
              // Iterate through the iterable and
              // add each element into the collection
              itr.forEach(cltn::add);
        
              // Return the converted collection
              return cltn;
          }
        
          public static void main(String[] args)
          {
              Iterable<Integer> i = Arrays.asList(1, 2, 3, 4);
              System.out.println("Iterable List : " + i);
        
              Collection<Integer> cn = getCollectionFromIteralbe(i);
              System.out.println("Collection List : " + cn);
          }
      }

      chevron_right

      
      

      Output:

      Iterable List : [1, 2, 3, 4]
      Collection List : [1, 2, 3, 4]
      

    • Using Iterator: The forEach loop uses Iterator in the background. Hence it can be done explicitly in the following way.

      filter_none

      edit
      close

      play_arrow

      link
      brightness_4
      code

      // Below is the program to convert an Iterable
      // into a Collection using Iterator
        
      import java.io.*;
      import java.util.*;
        
      class GFG {
          // function to convert Iterable into Collection
          public static <T> Collection<T> 
                         getCollectionFromIteralbe(Iterable<T> itr)
          {
              // Create an empty Collection to hold the result
              Collection<T> cltn = new ArrayList<T>();
        
              // Get the iterator at the iterable
              Iterator<T> iterator = itr.iterator();
        
              // Iterate through the iterable using
              // iterator to add each element into the collection
              while (iterator.hasNext()) {
                  cltn.add(iterator.next());
              }
        
              // Return the converted collection
              return cltn;
          }
        
          public static void main(String[] args)
          {
              Iterable<Integer> i = Arrays.asList(1, 2, 3, 4);
              System.out.println("Iterable List : " + i);
        
              Collection<Integer> cn = getCollectionFromIteralbe(i);
              System.out.println("Collection List : " + cn);
          }
      }

      chevron_right

      
      

      Output:

      Iterable List : [1, 2, 3, 4]
      Collection List : [1, 2, 3, 4]
      
  2. Java 8 Stream: With the introduction of Stream in Java 8, works like this has become quite easy. To convert iterable to Collection, the iterable is first converted into spliterator. Then with the help of StreamSupport.stream(), the spliterator can be traversed and then collected with the help collect() into collection.
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Program to convert an Iterable
    // into a Collection
      
    import java.io.*;
    import java.util.*;
    import java.util.stream.*;
      
    class GFG {
        // function to convert Iterable into Collection
        public static <T> Collection<T>
                        getCollectionFromIteralbe(Iterable<T> itr)
        {
            // Create an empty Collection to hold the result
            Collection<T> cltn = new ArrayList<T>();
      
            return StreamSupport.stream(itr.spliterator(), false)
                .collect(Collectors.toList());
        }
      
        public static void main(String[] args)
        {
            Iterable<Integer> i = Arrays.asList(1, 2, 3, 4);
            System.out.println("Iterable List : " + i);
      
            Collection<Integer> cn = getCollectionFromIteralbe(i);
            System.out.println("Collection List : " + cn);
        }
    }

    chevron_right

    
    

    Output:

    Iterable List : [1, 2, 3, 4]
    Collection List : [1, 2, 3, 4]
    


My Personal Notes arrow_drop_up

Technical Content Engineer

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :
Practice Tags :


3


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.