SeouliteLab
[Java/자바] Predicate.negate() 메서드 이해하기 본문
Java 6에서 소개된 Predicate.negate() 메서드는 Predicate의 조건을 부정하는 역할을 합니다. 이를 통해 조건을 반대로 만들어 편리하게 사용할 수 있습니다.
1. Predicate.negate() 메서드 소개
Predicate.negate() 메서드는 Predicate 인터페이스의 디폴트 메서드로, 주어진 조건의 부정을 반환합니다. 즉, 주어진 Predicate의 조건이 true일 때 false를 반환하고, false일 때 true를 반환합니다.
2. Predicate.negate() 메서드 예제
예제 1: 양수가 아닌 숫자 필터링하기
import java.util.function.Predicate;
public class NonPositiveNumberFilter {
public static void main(String[] args) {
Predicate<Integer> isPositive = num -> num > 0;
Predicate<Integer> isNonPositive = isPositive.negate();
System.out.println(isPositive.test(5)); // true 출력
System.out.println(isNonPositive.test(5)); // false 출력
System.out.println(isNonPositive.test(-2)); // true 출력
}
}
위 예제에서는 먼저 양수인지 검사하는 Predicate를 만들고, 이를 negate() 메서드를 사용하여 양수가 아닌 숫자를 필터링하는 Predicate로 변환합니다.
예제 2: 문자열 길이가 5 이하인지 확인하기
import java.util.function.Predicate;
public class ShortStringLengthCheck {
public static void main(String[] args) {
Predicate<String> isLongerThan5 = str -> str.length() > 5;
Predicate<String> isShorterThanOrEqual5 = isLongerThan5.negate();
System.out.println(isLongerThan5.test("Java 8")); // true 출력
System.out.println(isShorterThanOrEqual5.test("Java 8")); // false 출력
System.out.println(isShorterThanOrEqual5.test("Java")); // true 출력
}
}
위 예제에서는 문자열 길이가 5보다 큰지 검사하는 Predicate를 만들고, 이를 negate() 메서드를 사용하여 문자열 길이가 5 이하인지 확인하는 Predicate로 변환합니다.
예제 3: 짝수가 아닌 숫자 필터링하기
import java.util.function.Predicate;
public class NonEvenNumberFilter {
public static void main(String[] args) {
Predicate<Integer> isEven = num -> num % 2 == 0;
Predicate<Integer> isNonEven = isEven.negate();
System.out.println(isEven.test(4)); // true 출력
System.out.println(isNonEven.test(4)); // false 출력
System.out.println(isNonEven.test(5)); // true 출력
}
}
위 예제에서는 먼저 짝수인지 검사하는 Predicate를 만들고, 이를 negate() 메서드를 사용하여 짝수가 아닌 숫자를 필터링하는 Predicate로 변환합니다.
예제 4: null인 문자열 필터링하기
import java.util.function.Predicate;
public class NullStringFilter {
public static void main(String[] args) {
Predicate<String> isNotNull = str -> str != null;
Predicate<String> isNull = isNotNull.negate();
System.out.println(isNotNull.test("Java")); // true 출력
System.out.println(isNull.test("Java")); // false 출력
System.out.println(isNull.test(null)); // true 출력
}
}
위 예제에서는 먼저 null이 아닌 문자열인지 검사하는 Predicate를 만들고, 이를 negate() 메서드를 사용하여 null인 문자열을 필터링하는 Predicate로 변환합니다.
예제 5: 나이가 18세 이상인지 확인하기
import java.util.function.Predicate;
public class AgeCheck {
public static void main(String[] args) {
Predicate<Integer> isAdult = age -> age >= 18;
Predicate<Integer> isNotAdult = isAdult.negate();
System.out.println(isAdult.test(20)); // true 출력
System.out.println(isNotAdult.test(20)); // false 출력
System.out.println(isNotAdult.test(15)); // true 출력
}
}
위 예제에서는 먼저 18세 이상인지 검사하는 Predicate를 만들고, 이를 negate() 메서드를 사용하여 18세 미만인 경우를 확인하는 Predicate 로 변환합니다.
예제 6: 소수가 아닌 숫자 필터링하기
import java.util.function.Predicate;
public class NonPrimeNumberFilter {
public static void main(String[] args) {
Predicate<Integer> isPrime = num -> {
if (num <= 1) return false;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) return false;
}
return true;
};
Predicate<Integer> isNonPrime = isPrime.negate();
System.out.println(isPrime.test(7)); // true 출력
System.out.println(isNonPrime.test(7)); // false 출력
System.out.println(isNonPrime.test(4)); // true 출력
}
}
위 예제에서는 먼저 소수인지 검사하는 Predicate를 만들고, 이를 negate() 메서드를 사용하여 소수가 아닌 숫자를 필터링하는 Predicate로 변환합니다.
'프로그래밍' 카테고리의 다른 글
[Java/자바] 다수의 Predicate를 and()로 연결하여 수행하기 (0) | 2024.03.13 |
---|---|
[Java/자바] Predicate.isEqual() 메서드: 동등성 검사 (0) | 2024.03.13 |
[Java/자바] Java 8 Predicate를 이해하고 활용하기 (0) | 2024.03.13 |
[Java/자바] UnaryOperator와 andThen() 메서드 활용 예제 (0) | 2024.03.13 |
[Java/자바] UnaryOperator 인터페이스: 함수형 프로그래밍에서의 활용 (0) | 2024.03.13 |