Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Cargando en…3
×

Eche un vistazo a continuación

1 de 28 Anuncio
Anuncio

Más Contenido Relacionado

Más reciente (20)

Anuncio

19. API Stream

  1. 1. Eduardo Corral Muñoz eoi_eduardo@corral.es Java Bootcamp F.4411.316.009 - POEJ/MIXTO/F. Generation/ Curso JAVA (Online-Nacional) 2ªEd.
  2. 2. Java Intermedio 4
  3. 3. Índice _01 _02 _03 _04 _05 _06 _07 API Stream Crear un Stream Operador map Operador filter anyMatch y allMatch count, distinct, reduce Stream de enteros
  4. 4. 01 API Stream
  5. 5. 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
  6. 6. 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.
  7. 7. 02 Crear un Stream
  8. 8. Crear un Stream Método Stream.of(valores) Stream<String> nombres = Stream.of("Juan","Marta","José","María"); //nombres.forEach(e -> System.out.println(e)); nombres.forEach(System.out::println);
  9. 9. Crear un Stream Método Arrays.stream(arr) String[] arr = {"Juan","Marta","José","María"}; Stream<String> nombres = Arrays.stream(arr); nombres.forEach(System.out::println);
  10. 10. Crear un Stream Método Stream builder Stream<String> nombres = Stream.<String>builder() .add("Juan") .add("Marta") .add("José") .add("María") .build(); nombres.forEach(System.out::println);
  11. 11. Crear un Stream Desde un tipo Collection List<String> lista = new ArrayList<>(); lista.add("Juan"); lista.add("Marta"); lista.add("José"); lista.add("María"); //Stream<String> nombre = lista.stream(); //nombres.forEach(System.out::println); lista.stream().forEach(System.out::println);
  12. 12. 03 Operador map
  13. 13. 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);
  14. 14. Operador map Convertir en otro tipo (objetos). Creamos la clase Usuario public class Usuario { private String nombre; private String apellidos; … constructor … getters y setters }
  15. 15. 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());
  16. 16. 04 Operador filter
  17. 17. Operador filter Es un operador intermedio que nos permite filtrar los datos del flujo. Stream<String> nombres = Stream.of("Juan", "Marta", "José", "María") .map(nombre -> nombre.toUpperCase()) //.filter(u -> u.equals("JUAN")) .filter(u -> u.contains("M")); nombres.forEach(e -> System.out.println(e));
  18. 18. 05 anyMatch y allMatch
  19. 19. Operadores anyMatch y allMatch Es un operador terminal booleano que nos permite buscar coincidencias en los datos del flujo. boolean nombres = Stream.of("Juan", "Marta", "José Andrés", "María") .map(nombre -> nombre.toUpperCase()) //.anyMatch(u -> u.contains(“J")) // Terminal .allMatch(u -> u.contains(“A")); System.out.println(nombres);
  20. 20. 06 count, distinct, reduce
  21. 21. count Es un operador terminal long que permite contar los elementos de un stream, con o sin filtros. long count = Stream.of("Juan", "Marta", "", "José","", "María") .filter(n -> n.isEmpty()) .peek(e -> System.out.println(e)) .count(); System.out.println("count = " + count);
  22. 22. distinct Es un operador terminal que permite eliminar los duplicados. Stream<String> nombres = Stream.of("Juan", "Marta", "Pepe", "José", "Pepe", "María", "Pepe") .distinct(); nombres.forEach(System.out::println);
  23. 23. reduce Es un operador terminal que permite concatenar los elementos de un Stream. Stream<String> nombres = Stream.of("Juan", "Marta", "Pepe", "José","Pepe", "María") .distinct(); String resultado = nombres.reduce("resultado concatenado =",(a,b)-> a + ", " + b); System.out.println(resultado);
  24. 24. 07 Streams de enteros reduce, sum, rangos, …
  25. 25. reduce y sum Operadores terminales que permiten sumar todos los elementos de un Stream de enteros. Stream<Integer> numeros = Stream.of(5, 10, 15, 20, 25); //int resultado = numeros.reduce(0,(a,b)-> a + b); int resultado = numeros.reduce(0, Integer::sum); System.out.println(resultado);
  26. 26. rangos Operadores terminales que definir un rango de números enteros. IntStream  Stream de enteros. //IntStream numeros = IntStream.rangeClosed(5, 20) // 5 .. 20 IntStream numeros = IntStream.range(5, 20) // 5 .. 19 .peek(System.out::println); //int resultado = numeros.reduce(0,(a,b)-> a + b); //int resultado = numeros.reduce(0, Integer::sum); int resultado = numeros.sum(); // Solo disponible en IntStream System.out.println(resultado);
  27. 27. Estadisticas Operadores terminales que permite extraer datos estadísticos de un IntStream. IntStream numeros = IntStream.rangeClosed(5, 20) // 5 .. 20 .peek(System.out::println); IntSummaryStatistics estadisticas = numeros.summaryStatistics(); System.out.println("max: " + estadisticas.getMax()); System.out.println("media: " + estadisticas.getAverage()); System.out.println("min: " + estadisticas.getMin()); System.out.println("cuenta: " + estadisticas.getCount()); System.out.println("suma: " + estadisticas.getSum()); System.out.println("resumen: " + estadisticas.toString());

×