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:
- para cada()
- println() con recopilar()
- ojeada()
A continuación se muestran las tres formas de imprimir el Stream en detalle:
- 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
- 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
- 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