
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Use Predicate and BiPredicate in Lambda Expression in Java
A Predicate<T> interface defined in java.util.function package. It represents a boolean-valued function with one argument. It is kind of a functional interface whose functional method is the test(). BiPredicate<T, U> interface is similar to the Predicate<T> interface with two arguments. It can be used as an assignment target for a lambda expression.
Syntax for Predicate
@FunctionalInterface public interface Predicate<T>
Example
import java.util.*; import java.util.function.*; import java.util.stream.*; public class EmployeePredicateTest { public static void main(String[] args) { Employee e1 = new Employee(1, 23, "M", "Raja"); Employee e2 = new Employee(2, 13, "M", "Jai"); Employee e3 = new Employee(3, 36, "F", "Yamini"); Employee e4 = new Employee(4, 26, "F", "Geetha"); Employee e5 = new Employee(5, 19, "M", "Adithya"); List<Employee> employees = new ArrayList<Employee>(); employees.addAll(Arrays.asList(new Employee[]{e1, e2, e3, e4, e5})); System.out.println(EmployeePredicate.filterEmployees(employees, EmployeePredicate.isAdultMale())); System.out.println(EmployeePredicate.filterEmployees(employees, EmployeePredicate.isAdultFemale())); System.out.println(EmployeePredicate.filterEmployees(employees, EmployeePredicate.isAgeMoreThan(35))); System.out.println(EmployeePredicate.filterEmployees(employees, EmployeePredicate.isAgeMoreThan(35).negate())); } } // Employee class class Employee { private Integer id; private Integer age; private String gender; private String name; public Employee(Integer id, Integer age, String gender, String name) { this.id = id; this.age = age; this.gender = gender; this.name = name; } public Integer getAge() { return age; } public String getGender() { return gender; } public String getName() { return name; } @Override public String toString() { return this.name.toString()+" - "+ this.age.toString(); } } // EmployeePredicate class class EmployeePredicate { public static Predicate isAdultMale() { return p -> p.getAge() > 21 && p.getGender().equalsIgnoreCase("M"); } public static Predicate isAdultFemale() { return p -> p.getAge() > 18 && p.getGender().equalsIgnoreCase("F"); } public static Predicate isAgeMoreThan(Integer age) { return p -> p.getAge() > age; } public static List filterEmployees(List<Employee> employees, Predicate<Employee> predicate) { return employees.stream().filter(predicate).collect(Collectors.<Employee>toList()); } }
Output
[Raja - 23] [Yamini - 36, Geetha - 26] [Yamini - 36] [Raja - 23, Jai - 13, Geetha - 26, Adithya - 19]
Syntax for BiPredicate
@FunctionalInterface public interface BiPredicate<T, U>
Example
import java.util.*; import java.util.function.*; public class BiPredicateTest { public static void main(String[] args) { BiPredicate<Integer, Integer> bi = (x, y) -> x > y; BiPredicate<Integer, Integer> eq = (x, y) -> x -2 > y; System.out.println(bi.test(2, 3)); System.out.println(bi.or(eq).test(2, 3)); System.out.println(bi.or(eq).test(8, 3)); } }
Output
false false true
Advertisements