TechnologyZer
technologyzer.com

Introduction to Predicate Functional Interface

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;
    }
}

Leave a Comment