SeouliteLab

[Java/자바] Predicate.negate() 메서드 이해하기 본문

프로그래밍

[Java/자바] Predicate.negate() 메서드 이해하기

Seoulite Lab 2024. 3. 13. 08:32

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로 변환합니다.