Convertir iterador a iterable en Java

Dado un Iterador, la tarea es convertirlo en Iterables en Java.

Ejemplos:

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'}

A continuación se muestran las diversas formas de hacerlo:

  • Al anular el método abstracto Iterable.iterator() :
    1. Obtenga el iterador.
    2. Anule el método Iterable.iterator() y obtenga iterable.
    3. Devuelve el Iterable.

    A continuación se muestra la implementación del enfoque anterior:

    // 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);
        }
    }
    Producción:

    1
    2
    3
    4
    5
    
  • Usando la expresión lambda de Java 8 :
    1. Obtenga el iterador.
    2. Convierta el iterador en iterable mediante Lambda Expression.
    3. Devuelve el Iterable.

    A continuación se muestra la implementación del enfoque anterior:

    // 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);
        }
    }
    Producción:

    1
    2
    3
    4
    5
    
  • Uso de divisores :
    1. Obtenga el iterador.
    2. Convierta el iterador en Spliterator utilizando el método Spliterators.spliteratorUnknownSize().
    3. Convierta Spliterator en Sequential Stream utilizando el método StreamSupport.stream().
    4. Recopile los elementos de Sequential Stream como Iterable usando el método collect().
    5. Devuelve el Iterable.

    A continuación se muestra la implementación del enfoque anterior:

    // 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);
        }
    }
    Producción:

    1
    2
    3
    4
    5
    

Publicación traducida automáticamente

Artículo escrito por RishabhPrabhu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *