3.5 KiB
3.5 KiB
title, localeTitle
| title | localeTitle |
|---|---|
| Streams | Streams |
Streams
En Java 8 Streams se agregó como una nueva característica a la caja de herramientas de Java. Los Streams le permiten procesar colecciones de forma rápida y limpia.
Lea el capítulo sobre lambdas y la programación funcional antes de continuar.
Cómo funciona
Los Stream recorren los elementos de una colección, todos los pasos intermedios y operaciones terminales son llamadas para cada objeto en la colección. Una vez que todas las operaciones han finalizado para el primer objeto, se carga el segundo objeto.
Métodos importantes
Creación
Collection.stream(): crea un Stream desde cualquier objeto de cualquier clase que implementaCollectionArrays.stream(array): crea un Stream desde un Array
Operaciones intermedias
Estas operaciones convierten los objetos Stream de alguna manera.
Stream.map(Function<In,Out> function): aplica una función para convertir el objeto de entrada en otro distinto de salidaStream.filter(Predicate<In> predicate): elimina los objetos para los cuales el Predicate no es verdaderoStream.distinct(): elimina los objetos de la secuencia que son duplicadosStream.sorted(): ordena los Objetos en el StreamStream.limit(int n): parar Stream después de n objetos
Operaciones terminales
Estas operaciones reciben los objetos de secuencia y terminan la secuencia.
Stream.collect(Collector<In,?,Out> collector): recopila todos los objetos del Stream en un ObjectStream.forEach(Consumer<In> consumer): consume todos los Objetos del Stream utilizando la función de consumidorStream.count(): cuenta todos los objetos del StreamStream.findFirst(): devuelve el primer objeto de la secuencia y se detieneStream.anyMatch(Predicate<In> predicate): devuelve verdadero si algún Objeto en el Stream es verdadero para el PredicadoStream.allMatch(Predicate<In> predicate): devuelve verdadero si todos los Objetos en el Stream son verdaderos para el Predicado
Ejemplos
// Imprime el largo de todos los Strings de la lista
for (String string : Arrays.asList("abc", "de", "f", "abc")) {
int length = string.length();
System.out.println(length);
}
Arrays.asList("abc", "de", "f", "abc")
.stream()
.map(String::length)
.forEach(System.out::println);
// salida: 3 2 1 3
// imprime todos los Strings de la lista con un largo mayor que 2
for (String string : Arrays.asList("abc", "de", "f", "abc")) {
if (string.length() > 2) {
System.out.println(string);
}
}
Arrays.asList("abc", "de", "f", "abc")
.stream()
.filter(string -> string.length() > 2)
.forEach(System.out::println);
// salida: abc abc
// Crea una lista ordenada con todos los Strings unicos de otra lista que sean mayores o iguales a 2 de largo
List<String> result = new ArrayList<>();
for (String string : Arrays.asList("de", "abc", "f", "abc")) {
if (string.length() >= 2
&& ! result.contains(string)) {
result.add(string);
}
}
Collections.sort(result);
List<String> result2 = Arrays.asList("de", "abc", "f", "abc")
.stream()
.filter(string -> string.length() >= 2)
.distinct()
.sorted()
.collect(Collectors.toList());
// salida: abc de