Utilitzant Java 8 Predicate

Crear un Java 8 Predicate, és una de les operacions que més farem quan treballem amb expressions Lambda i Streams en Java 8. Què és un Predicat? , 1 Predicat és una interfície funcional que defineix una condició que un objecte determinat ha de complir. Per exemple és una Persona major de 20 anys?.

Java 8 Predicate Impl

El Predicat disposa d’un únic mètode anomenat test que rep l’objecte i comprova si compleix la condició. Construirem en exemple recolzant-nos en la classe Persona.

package com.arquitecturajava;public class Persona {private String nombre;private String apellidos;private int edad;public String getNombre() {return nombre;}public void setNombre(String nombre) {this.nombre = nombre;}public Persona(String nombre, String apellidos, int edad) {super();this.nombre = nombre;this.apellidos = apellidos;this.edad = edad;}public String getApellidos() {return apellidos;}public void setApellidos(String apellidos) {this.apellidos = apellidos;}public int getEdad() {return edad;}public void setEdad(int edad) {this.edad = edad;}}

Anem a construir una llista de Persones per a més endavant aplicar un Predicat a sobre.

public class Principal {public static void main(String args) {List<Persona> lista = new ArrayList<>();Persona p1 = new Persona("pepe", "perez", 20);Persona p2 = new Persona("angel", "sanchez", 30);Persona p3 = new Persona("pepe", "blanco", 40);lista.add(p1);lista.add(p2);lista.add(p3);}}

Finalment convertirem la llista en un Stream de dades i la recorrerem:

lista.stream().forEach(new Consumer<Persona>() {@Overridepublic void accept(Persona p) {System.out.println(p.getNombre());}});

El resultat serà

pepe a angel a pepe

Java 8 Predicate

Hem recorregut la llista, crearem un Predicat que s’encarregui de definir una condició que permeti filtrar la llista.

Predicate<Persona> predicadoNombre = new Predicate<Persona>() {@Override public boolean test(Persona p) { return p.getNombre().equals("pepe"); }};

En aquest cas acabem de crear un Predicat que només compliran les persones que es diguin “pepe”. Fem servir la funció filter a nivell de Streams per passar aquest objecte Predicat i obligar que es filtri sobre la base de la condició que el Predicat defineix.

 lista.stream().filter(predicadoNombre).forEach(p -> System.out.println(p.getApellidos()));

el resultat en pantalla serà:
Java8PredicateFilter

Java8PredicateFilter

El Stream s’ha recolzat en el Predicat per realitzar el filtrat i quedar-nos amb les Persones que es diuen “pepe”. Recordem que les interfícies funcionals es poden veure com expressions Lambda i la seva gestió és més senzilla.

Java 8 Predicate Lambda

És moment de convertir el nostre Java 8 Predicate a una expressió lambda per guanyar claredat:

lista.stream().filter(p -> p.getNombre().equals("pepe")).forEach(p -> System.out.println(p.getApellidos()));

El resultat serà idèntic:

Java8PredicateFilter

Java8PredicateFilter

Els Predicats de Java 8 són inprescindibles

Altres articles relacionats: Java Lambda Java Streams

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *