¿Te gustaría Java desde cero?
Tenemos los diplomados que necesitas.¡Haz clic aquí!

Conocer Java Pattern Predicate nos puede ayudar a simplificar la forma que tenemos de trabajar con Java Streams a la hora de realizar filtrados. Normalmente cuando realizamos filtrados dentro de un Stream nos encontramos con que usamos algún tipo de Java Predicate . Vamos a ver un ejemplo sencillo de como usar Java Pattern Predicate , supongamos que tenemos un Stream de números.

  1. package com.arquitecturajava;
  2. import java.util.stream.Stream;
  3. public class Principal {
  4. public static void main(String[] args) {
  5. Stream<Integer> stream=Stream.of(1,5,7,9,8,2);
  6. stream.filter(item->item>5).forEach(System.out::println);
  7. }
  8. }

Es muy sencillo usar el high order function  de filter y filtrar las notas que superan el 5 y son aprobados , si ejecutamos el código la consola los mostrará los valores mayores de 5.

java stream

Sin embargo existen situaciones que no son tan sencillas y que los valores pueden venir construidos de la siguiente forma.

  1. package com.arquitecturajava;
  2. import java.util.stream.Stream;
  3. public class Principal2 {
  4. public static void main(String[] args) {
  5. Stream<Integer> stream=Stream.of(1,5,7,9,8,2);
  6. stream.filter(item->item>5).forEach(System.out::println);
  7. Stream<String> mistream=Stream.of(«hola»,»4″,»6″,»7″,»estas»,»9″);
  8. }
  9. }

En este caso para obtener los valores numéricos  tenemos que mezclar cadenas de texto  y valores nunéricos que en este caso son cadenas de texto. ¿CÓmo podemos hacerlo? . Bueno una solución sencilla es usar expresiones regulares.

  1. package com.arquitecturajava;
  2. import java.util.regex.Matcher;
  3. import java.util.regex.Pattern;
  4. import java.util.stream.Stream;
  5. public class Principal2 {
  6. public static void main(String[] args) {
  7. Stream<Integer> stream = Stream.of(1, 5, 7, 9, 8, 2);
  8. stream.filter(item -> item > 5).forEach(System.out::println);
  9. Pattern patron = Pattern.compile(«\\d+»);
  10. Matcher cumple = patron.matcher(«7»);
  11. System.out.println(cumple.matches());
  12. }
  13. }

Con este código conseguimos a nivel de expresión regular validar que cumplimos con que el texto contiene uno o más digitos. Por lo tanto por la consola nos imprimirá true.

true

Nos queda combinarlo con el concepto de Predicate y Streams.

Java Pattern Predicate

Con Java 8 podemos realizar esta operación de forma muy sencilla ya que la clase Pattern aporta un método que convierte el patrón directamente en un predicate (Pattern.asPredicate) .

java pattern Predicate

Así es muy sencillo convertir la expresión regular en un Predicado y utilizarla dentro de un Stream.

  1. package com.arquitecturajava;
  2. import java.util.regex.Pattern;
  3. import java.util.stream.Stream;
  4. public class Principal3 {
  5. public static void main(String[] args) {
  6. Pattern patron=Pattern
  7. .compile(«\\d+»);
  8. Stream<String> mistream=Stream.of(«hola»,»4″,»6″,»7″,»estas»,»9″);
  9. mistream.filter(patron.asPredicate())
  10. .map(Integer::parseInt)
  11. .filter(n->n>5)
  12. .forEach(System.out::println);
  13. }
  14. }

El resultado únicamente incluirá los valores superiores a 5 acabamos de usar un Java Pattern Predicate.

Acabamos de ver otro uso del API de Java 8 para simplificar el trabajo con Java Stream y Lambdas.

Te esperamos en los siguientes artículos en donde hablaremos mas acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.

¿Te gustaría Java desde cero?
Tenemos los diplomados que necesitas.¡Haz clic aquí!

About Author

NGuerrero

0 0 votos
Article Rating
Suscribir
Notificar de
guest
0 Comments
Comentarios.
Ver todos los comentarios
0
¿Te gusta este articulo? por favor comentax