@FunctionalInterface
public interface Predicate<T> {
// 전달된 객체가 주어진 조건을 만족하는지 평가
boolean test(T t);
}
예시1) 주어진 숫자가 짝수인지 확인하는 predicate
Predicate<Integer> isEven = number -> number % 2 == 0;
System.out.println(isEven.test(4)); // 출력: true
System.out.println(isEven.test(5)); // 출력: false
예시2) predicate를 이용해 리스트에서 짝수만 필터링
Predicate<Integer> isEven = number -> number % 2 == 0;
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> evenNumbers = numbers.stream()
.filter(isEven)
.collect(Collectors.toList());
}
아래와 같이 정의한다고 가정
Predicate<Integer> isEven = number -> number % 2 == 0;
Predicate<Integer> isPositive = number -> number > 0;
List<Integer> numbers = Arrays.asList(-2, -1, 0, 1, 2, 3, 4);
Predicate<Integer> isEvenAndPositive = isEven.and(isPositive);
List<Integer> evenAndPositives = numbers.stream()
.filter(isEvenAndPositive)
.collect(Collectors.toList());
System.out.println(evenAndPositives); // 출력: [2, 4]
Predicate<Integer> isEvenOrPositive = isEven.or(isPositive);
List<Integer> evenOrPositives = numbers.stream()
.filter(isEvenOrPositive)
.collect(Collectors.toList());
System.out.println(evenOrPositives); // 출력: [-2, 0, 1, 2, 3, 4]
Predicate<Integer> isNotEven = isEven.negate();
List<Integer> oddNumbers = numbers.stream()
.filter(isNotEven)
.collect(Collectors.toList());
System.out.println(oddNumbers); // 출력: [-1, 1, 3]