Java Predicate Interface y sus métodos

¿Cuales son los métodos más utilizados de un Java Predicate Interface? . Estamos muy acostumbrados a usar un predicado concreto para filtrar Streams . Muchas veces se nos olvida que el interface soporta varios métodos que aportan flexibilidad. Vamos a echarlos un vistazo . Para ello partiremos de una colección de Personas que queremos recorrer utilizando Streams.

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 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;
	}
	
	public Persona(String nombre, String apellidos, int edad) {
		super();
		this.nombre = nombre;
		this.apellidos = apellidos;
		this.edad = edad;
	}

}

package com.arquitecturajava;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

public class Principal {

	public static void main(String[] args) {
		
	
		List<Persona> lista= new ArrayList<Persona>();
		
		Persona p1= new Persona ("pepe","perez",20);
		Persona p2= new Persona ("ana","perez",30);
		Persona p3= new Persona ("gema","sanchez",40);
		Persona p4= new Persona ("pedro","gomez",70);
		
		lista.add(p1);
		lista.add(p2);
		lista.add(p3);
		lista.add(p4);
		
	}

}


 

Métodos de Java Predicate Interface

Uno de los métodos más utilizados del interface es and() que permite unir dos predicados y que la condición se cumpla si ambos predicados son ciertos.


Predicate<Persona> predicado1= p->p.getEdad()>18;
Predicate<Persona> predicado2= p->p.getEdad()<30;
Predicate<Persona> predicado3= predicado1.and(predicado2);

En este caso estamos fusionando el predicado1 y el predicado2:

javapredicateinterfaceand

De igual forma podemos usar la clausula or() que fusiona los predicados pero hace que se cumpla la condición si uno de los dos es cierto.


Predicate<Persona> predicado4= p->p.getEdad()>65;
Predicate<Persona> predicado5=predicado4.or(predicado3);

javapredicateinterfaceor

Por último podemos modificar el predicado y añadir una negación de tal forma que se cumpla lo contrario:


Predicate<Persona> predicado4= p->p.getEdad()>65;
Predicate<Persona> predicado5=predicado4.or(predicado3).negate();

Es momento de recorrer la lista de Personas e imprimir por pantalla los nombres de las que cumplen las condiciones:

javapredicateinterfacestream

Predicate es uno de los interfaces que más vamos a utilizar manejando Streams conocerlo a detalle es importante. El soporte de sintaxis fluida los hace muy cómodos.

Otros artículos relacionados: Java Lambda , Java Streams , RxJava

About Cecilio Álvarez Caules

Cecilio Álvarez Caules Sun Certified Enterprise Architech (J2EE/JEE).

,

3 Responses to Java Predicate Interface y sus métodos

  1. Carol 3 noviembre, 2016 at 15:16 #

    Gracias , muy didáctico

    • Cecilio Álvarez Caules 3 noviembre, 2016 at 21:14 #

      Me alegro que te haya sido útil 🙂

  2. Diego 25 noviembre, 2016 at 21:18 #

    Hola Cecilio, te faltó poner el código que recorre la lista de personas e imprime.
    Saludos

Deja un comentario

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies