Cómo imprimir elementos de un Stream en Java 8

Introducido en Java 8, Stream API se usa para procesar colecciones de objetos. Una secuencia es una secuencia de objetos que admite varios métodos que se pueden canalizar para producir el resultado deseado.
Las características de Java stream son:

  • Una secuencia no es una estructura de datos, sino que recibe información de las colecciones, arrays o canales de E/S.
  • Los flujos no cambian la estructura de datos original, solo proporcionan el resultado según los métodos canalizados.
  • Cada operación intermedia se ejecuta con pereza y devuelve una secuencia como resultado, por lo tanto, se pueden canalizar varias operaciones intermedias. Las operaciones de terminal marcan el final de la secuencia y devuelven el resultado.

Hay 3 formas de imprimir los elementos de un Stream en Java:

  1. para cada()
  2. println() con recopilar()
  3. ojeada()

A continuación se muestran las tres formas de imprimir el Stream en detalle:

  1. Stream forEach (acción del consumidor) : este método realiza una acción para cada elemento de la transmisión. Stream forEach (acción del consumidor) es una operación terminal, es decir, puede atravesar el flujo para producir un resultado o un efecto secundario.

    Sintaxis:

    void forEach(Consumer<? super T> action)
    
    Where, Consumer is a functional interface
    and T is the type of stream elements.
    

    A continuación se muestra cómo imprimir elementos de Stream usando el método forEach():

    Programa 1:

    // Java code to print the elements of Stream
      
    import java.util.stream.*;
      
    class GFG {
        public static void main(String[] args)
        {
      
            // Get the stream
            Stream<String> stream = Stream.of("Geeks", "For",
                                              "Geeks", "A",
                                              "Computer", "Portal");
      
            // Print the stream
            stream.forEach(s -> System.out.println(s));
        }
    }
    Producción:

    Geeks
    For
    Geeks
    A
    Computer
    Portal
    

    Programa 2: Uso de la expresión lambda abreviada

    // Java code to print the elements of Stream
      
    import java.util.stream.*;
      
    class GFG {
        public static void main(String[] args)
        {
      
            // Get the stream
            Stream<String> stream = Stream.of("Geeks", "For",
                                              "Geeks", "A",
                                              "Computer", "Portal");
      
            // Print the stream
            stream.forEach(System.out::println);
        }
    }
    Producción:

    Geeks
    For
    Geeks
    A
    Computer
    Portal
    

    Programa 3: este enfoque consume el flujo y lo hace no disponible para uso futuro. Por lo tanto, el siguiente código arrojará un error ya que la transmisión ya se ha consumido.

    // Java code to print the elements of Stream
      
    import java.util.stream.*;
      
    class GFG {
        public static void main(String[] args)
        {
      
            // Get the stream
            Stream<String> stream = Stream.of("Geeks", "For",
                                              "Geeks", "A",
                                              "Computer", "Portal");
      
            // Print the stream
            stream.forEach(s -> System.out.println(s));
      
            // Since the stream has been already consumed
            // this will throw exception
            try {
      
                // Print the stream
                stream.forEach(s -> System.out.println(s));
            }
      
            catch (Exception e) {
      
                System.out.println("\nException: " + e);
            }
        }
    }
    Producción:

    Geeks
    For
    Geeks
    A
    Computer
    Portal
    
    Exception: java.lang.IllegalStateException: 
    stream has already been operated upon or closed
    
  2. Uso de println() con collect(): este método recopila los elementos de la secuencia como una instancia de recopilador, por ejemplo, como List. Por lo tanto, la impresión de List se puede hacer fácilmente usando el método println().

    Sintaxis:

    System.out.println(stream.collect(Collectors.toList()));
    

    Programa 1:

    // Java code to print the elements of Stream
      
    import java.util.stream.*;
      
    class GFG {
        public static void main(String[] args)
        {
      
            // Get the stream
            Stream<String> stream = Stream.of("Geeks", "For",
                                              "Geeks", "A",
                                              "Computer", "Portal");
      
            // Print the stream
            System.out.println(stream.collect(Collectors.toList()));
        }
    }
    Producción:

    [Geeks, For, Geeks, A, Computer, Portal]
    

    Programa 2: este enfoque también consume el flujo y lo hace no disponible para uso futuro. Por lo tanto, el siguiente código arrojará un error ya que la transmisión ya se ha consumido.

    // Java code to print the elements of Stream
      
    import java.util.stream.*;
      
    class GFG {
        public static void main(String[] args)
        {
      
            // Get the stream
            Stream<String> stream = Stream.of("Geeks", "For",
                                              "Geeks", "A",
                                              "Computer", "Portal");
      
            // Print the stream
            System.out.println(stream.collect(Collectors.toList()));
      
            // Since the stream has been already consumed
            // this will throw exception
            try {
      
                // Print the stream
                System.out.println(stream.collect(Collectors.toList()));
            }
      
            catch (Exception e) {
      
                System.out.println("\nException: " + e);
            }
        }
    }
    Producción:

    [Geeks, For, Geeks, A, Computer, Portal]
    
    Exception: java.lang.IllegalStateException: 
    stream has already been operated upon or closed
    
  3. Stream peek (Acción del consumidor) : este método devuelve un flujo que consta de los elementos de este flujo y, además, realiza la acción proporcionada en cada elemento a medida que se consumen elementos del flujo resultante. Esta es una operación intermedia, es decir, crea un nuevo flujo que, cuando se recorre, contiene los elementos del flujo inicial que coinciden con el predicado dado.

    Sintaxis:

    Stream<T> 
        peek(Consumer<? super T> action)
    
    Where, Stream is an interface and T is the type of 
    stream elements. action is a non-interfering action
    to perform on the elements as they are consumed 
    from the stream and the function returns the new stream.
    

    Programa 1:

    // Java code to print the elements of Stream
      
    import java.util.stream.*;
      
    class GFG {
        public static void main(String[] args)
        {
      
            // Get the stream
            Stream<String> stream = Stream.of("Geeks", "For",
                                              "Geeks", "A",
                                              "Computer", "Portal");
      
            // Print the stream using peek()
            // by providing a terminal operation count()
            stream.peek(s -> System.out.println(s)).count();
        }
    }
    Producción:

    Geeks
    For
    Geeks
    A
    Computer
    Portal
    

    Programa 2: este enfoque no consume el flujo. Por lo tanto, el siguiente código no arrojará ningún error.

    // Java code to print the elements of Stream
      
    import java.util.stream.*;
      
    class GFG {
        public static void main(String[] args)
        {
      
            // Get the stream
            Stream<String> stream = Stream.of("Geeks", "For",
                                              "GeeksForGeeks", "A",
                                              "Computer", "Portal");
      
            // Since the stream is not being consumed
            // this will not throw any exception
      
            // Print the stream
            stream.filter(s -> s.startsWith("G"))
                .peek(s -> System.out.println("Filtered value: " + s))
                .map(String::toUpperCase)
                .peek(s -> System.out.println("Uppercase value :" + s))
                .count();
        }
    }
    Producción:

    Filtered value: Geeks
    Uppercase value :GEEKS
    Filtered value: GeeksForGeeks
    Uppercase value :GEEKSFORGEEKS
    

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 *