Java 19
Java 19
Generation/
Curso JAVA (Online-Nacional) 3ªEd.
Java Bootcamp
Eduardo Corral Muñoz
[email protected]
Java
Intermedio 4
Índice
_01 API Stream
_02 Crear un Stream
_03 Operador map
_04 Operador filter
_05 anyMatch y allMatch
_06 count, distinct, reduce
_07 Stream de enteros
01
API Stream
API Stream
Es una combinación de lo mejor del Iterator y la programación
funcional para trabajar con flujos de datos.
Los stream son flujos o secuencias de datos que proceden en
general de una colección de Java o una matriz, sobre los que
podemos realizar operaciones, flitrarlos, …
Los elementos de un stream mantiene el mismo orden que en la
fuente.
No almacenan datos, no son contenedores, solo los “transmite”.
Manual
API Stream
Crea flujos de datos continuos.
Contienen operadores para procesar secuencias de datos.
Los operadores simplifican las transformaciones de los datos.
Transforma y compone flujos con diversos operadores como
map, filter, concat, distinct, flatmap, sorted, foreach, …
Se pueden crear desde Collections, matrices o rangos.
Son inmutables, la instancia original permanece inalterable, los
operadores devuelven una nueva instancia.
No almacenan datos, no son contenedores, solo los “transmite”.
Facilitan la concurrencia (threads, sincronización de procesos…)
Trabajan con expresiones lambda.
02
Crear un Stream
Crear un Stream
Método Stream.of(valores)
Operador map
Operador map
Es un operador intermedio que nos permite modificar o convertir
los datos del flujo.
Retorna el dato modificado
Se ejecutan cuando se invoca un operador terminal.
Stream<String> nombres = Stream.of("Juan", "Marta", "José", "María")
.peek(e -> System.out.println(e)) // Inspección
.map(nombre -> nombre.toUpperCase());
//.map(String::toUpperCase);
// operadores terminales
//nombres.forEach(e -> System.out.println(e));
// convertir a lista
List<String> lista = nombres.collect(Collectors.toList());
lista.forEach(System.out::println);
Operador map
Convertir en otro tipo (objetos).
Creamos la clase Usuario
public class Usuario {
private String nombre;
private String apellidos;
… constructor
… getters y setters
}
Operador map
Creamos una nueva clase Ejemplo
Stream<Usuario> nombres = Stream.of("Juan", "Marta", "José”,”María ")
.map(nombre -> new Usuario(nombre,null))
.peek(u -> System.out.println(u.getNombre())
.map(usuario -> {
String nombre = usuario.getNombre().toUpperCase();
usuario.setNombre(nombre);
return usuario;
});
// convertir a lista
List<Usuario> lista = nombres.collect(Collectors.toList());
lista.forEach(u -> System.out.println(u.getNombre());
04
Operador filter
Operador filter
Es un operador intermedio que nos permite filtrar los datos del
flujo.
anyMatch y allMatch
Operadores anyMatch y allMatch
Es un operador terminal booleano que nos permite buscar
coincidencias en los datos del flujo.
System.out.println(nombres);
06
nombres.forEach(System.out::println);
reduce
Es un operador terminal que permite concatenar los elementos de
un Stream.
System.out.println(resultado);
07
Streams de enteros
reduce, sum, rangos, …
reduce y sum
Operadores terminales que permiten sumar todos los elementos
de un Stream de enteros.
System.out.println(resultado);
rangos
Operadores terminales que definir un rango de números enteros.
IntStream Stream de enteros.
System.out.println(resultado);
Estadisticas
Operadores terminales que permite extraer datos estadísticos de
un IntStream.
IntStream numeros = IntStream.rangeClosed(5, 20) // 5 .. 20
.peek(System.out::println);