JAVA/JAVA8

Predicate Functional Interface

최-코드 2024. 8. 13. 14:31
  • boolean 타입을 리턴하고 하나의 인자를 받는 test함수가 있다.
  • return 타입이 필요한 메소드의 경우 한 줄이면 return을 생략해도 되지만, 여러 줄일 경우 return을 명시적으로 적어야 한다.
  • .and()을 통해 &&조건을 .or()을 통해 ||조건을, .negate()을 통해 !조건을 걸 수 있다.
public class PredicateExample {
    public static void main(String[] args) {
        Predicate<Integer> p1 = a -> a % 2 == 0;
        Predicate<Integer> p2 = a -> a % 5 == 0;
        System.out.println(p1.and(p2).test(10));
        System.out.println(p1.and(p2).test(9));

        System.out.println(p1.or(p2).test(8));
        System.out.println(p1.or(p2).test(9));

        System.out.println(p1.or(p2).negate().test(8));

        filterStudentsByGradeLevel();
    }

    public static void filterStudentsByGradeLevel() {
        Predicate<Student> p1 = student -> student.getGradeLevel() >= 3;
        Predicate<Student> p2 = student -> student.getGpa() >= 3.9;
        Consumer<Student> c = student -> {
            if (p1.and(p2).test(student))
                System.out.println(student.getName() + ":" + student.getActivities());
        };

        List<Student> studentList = StudentDataBase.getAllStudents();

        studentList.forEach(c);
    }
}