Interface Name | Description | Abstract Method |
---|
Predicate<T> | Accepts one arguments (reference type) | boolean test(T t) |
DoublePredicate | Accepts double value arguments | boolean test(double d) |
IntPredicate | Accepts Int value arguments | boolean test(int i) |
LongPredicate | Accepts Long value arguments | boolean test(long l) |
BiPredicate<T,U> | Accepts two arguments (reference type) | boolean test(T t, U u) |
test(T t) is an abstruct method in Predicate functional interface. It evaluates the given input and returns true or false.

public class Applicant {
private String name;
private int yearsOfExperience;
private boolean hasJavaSkills;
private boolean hasPythonSkills;
Applicant(String name, int yearsOfExperience,
boolean hasJavaSkills, boolean hasPythonSkills){
this.name = name;
this.yearsOfExperience = yearsOfExperience;
this.hasJavaSkills = hasJavaSkills;
this.hasPythonSkills = hasPythonSkills;
}
public String getName() {
return name;
}
public int getYearsOfExperience() {
return yearsOfExperience;
}
public boolean hasJavaSkills() {
return hasJavaSkills;
}
public boolean hasPythonSkills() {
return hasPythonSkills;
}
}
public class Main {
public static void main(String[] args) {
List<Applicant> applicantList = new ArrayList<>();
applicantList.add(new Applicant("Alice", 8, true, true));
applicantList.add(new Applicant("Bob", 3, true, true));
applicantList.add(new Applicant("Carol", 7, true, false));
applicantList.add(new Applicant("Dave", 5, false, true));
applicantList.add(new Applicant("Eve", 6, true, true));
Predicate<Applicant> experiencedApplicant = applicant -> applicant.getYearsOfExperience() >= 5;
Predicate<Applicant> hasJavaSkills = Applicant::hasJavaSkills;
Predicate<Applicant> hasPythonSkills = Applicant::hasPythonSkills;
Predicate<Applicant> hasOnlyJavaSkills = hasJavaSkills.or(hasPythonSkills.negate());
Predicate<Applicant> hasJavaOrPythonSkills = hasJavaSkills.or(hasPythonSkills);
List<Applicant> filteredApplicantsForJavaDeveloper = filterApplicantsForJavaDeveloper(applicantList, experiencedApplicant.and(hasOnlyJavaSkills));
List<Applicant> filteredApplicantsForJavaOrPythonDeveloper = filterApplicantsForJavaOrPythonDeveloper(applicantList, experiencedApplicant.and(hasJavaOrPythonSkills));
System.out.println("Shortlisted Java Applicant List: ");
for(Applicant applicant: filteredApplicantsForJavaDeveloper){
System.out.println(applicant.getName());
}
System.out.println("Shortlisted Java or Python Applicant List: ");
for(Applicant applicant: filteredApplicantsForJavaOrPythonDeveloper){
System.out.println(applicant.getName());
}
String applicantName = "Bob";
Predicate<String> searchPredicate = Predicate.isEqual(applicantName);
List<Applicant> searchApplicantList = isApplicantPresent(applicantList, searchPredicate);
System.out.println("Searching Applicant List: ");
for(Applicant applicant: searchApplicantList){
System.out.println(applicant.getName());
}
}
private static List<Applicant> filterApplicantsForJavaDeveloper(List<Applicant> applicantList, Predicate<Applicant> predicate){
List<Applicant> filteredApplicant = new ArrayList<>();
for(Applicant applicant: applicantList){
if(predicate.test(applicant)){
filteredApplicant.add(applicant);
}
}
return filteredApplicant;
}
private static List<Applicant> filterApplicantsForJavaOrPythonDeveloper(List<Applicant> applicantList, Predicate<Applicant> predicate){
List<Applicant> filteredApplicant = new ArrayList<>();
for(Applicant applicant: applicantList){
if(predicate.test(applicant)){
filteredApplicant.add(applicant);
}
}
return filteredApplicant;
}
private static List<Applicant> isApplicantPresent(List<Applicant> applicantList, Predicate<String> predicate){
List<Applicant> filteredApplicant = new ArrayList<>();
for(Applicant applicant: applicantList){
if(predicate.test(applicant.getName())){
filteredApplicant.add(applicant);
}
}
return filteredApplicant;
}
}