iWhiver
11/4/2018 - 11:39 AM

Java 8 - Predicate

1. They move your conditions (sometimes business logic) to a central place. 
This helps in unit-testing them separately.
2. Any change need not be duplicated into multiple places. Java predicate improves code maintenance.
3. The code e.g. “filterEmployees(employees, isAdultFemale())” is very much readable than
writing a if-else block.

evaluate(list, (n)-> n.length() > 3 );

public static void evaluate(List<String> list, Predicate<String> predicate) {
        for(String n: list)  {
            if(predicate.test(n)) {
                System.out.println(n + " ");
            }
        }
    }

package predicateExample;
 
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
 
public class EmployeePredicates
{
    public static Predicate<Employee> isAdultMale() {
        return p -> p.getAge() > 21 && p.getGender().equalsIgnoreCase("M");
    }
     
    public static Predicate<Employee> isAdultFemale() {
        return p -> p.getAge() > 18 && p.getGender().equalsIgnoreCase("F");
    }
     
    public static Predicate<Employee> isAgeMoreThan(Integer age) {
        return p -> p.getAge() > age;
    }
     
    public static List<Employee> filterEmployees (List<Employee> employees,
                                                Predicate<Employee> predicate)
    {
        return employees.stream()
                    .filter( predicate )
                    .collect(Collectors.<Employee>toList());
    }
}  



System.out.println( filterEmployees(employees, isAdultMale()) );
         
System.out.println( filterEmployees(employees, isAdultFemale()) );
 
System.out.println( filterEmployees(employees, isAgeMoreThan(35)) );