Java - BiPredicate 예제

Java 8에서 도입된 BiPredicate의 기본적인 사용 방법 및 예제에 대해서 알아보겠습니다.

1. BiPredicate

BiPredicate는 2개의 인자를 받고 boolean을 리턴하는 함수형 인터페이스입니다.

public interface BiPredicate<T, U> {

    /**
     * Evaluates this predicate on the given arguments.
     *
     * @param t the first input argument
     * @param u the second input argument
     * @return {@code true} if the input arguments match the predicate,
     * otherwise {@code false}
     */
    boolean test(T t, U u);

    ....
}

2. BiPredicate의 구현 방법 및 예제

BiPredicate 객체는 Lambda로 구현할 수 있습니다.

test() 호출 시 인자 2개를 전달하면 구현된 내용이 수행되며 boolean이 리턴됩니다.

import java.util.function.BiPredicate;

public class BiPredicateExample1 {

    public static void main(String[] args) {

        BiPredicate<Integer, Integer> biPredicate = (n1, n2) -> n1 > n2;

        boolean result = biPredicate.test(10, 100);

        System.out.println(result);
    }
}

Output:

false

3. and()로 다수의 BiPredicate 연산

BiPredicate.and()는 BiPredicate들을 연결하는(Chain) 메소드입니다. BiPredicate들의 결과들을 AND 연산하고 그 결과를 리턴합니다.

아래 예제에서 biPredicate1.and(biPredicate2).test(11, 10)는 biPredicate1과 biPredicate2가 모두 true일 때 true가 리턴됩니다. 둘 중 하나라도 false라면 false가 리턴됩니다.

import java.util.function.BiPredicate;

public class BiPredicateExample2 {

    public static void main(String[] args) {

        BiPredicate<Integer, Integer> biPredicate1 = (n1, n2) -> n1 > n2;
        BiPredicate<Integer, Integer> biPredicate2 = (n1, n2) -> n1 * n2 > 100;

        boolean result = biPredicate1.and(biPredicate2).test(11, 10);

        System.out.println(result);
    }
}

Output:

true

4. or()로 다수의 BiPredicate 연산

or()and()처럼 BiPredicate들을 연결하는 메소드입니다. 하지만 or()는 BiPredicate들의 OR 연산에 대한 결과를 리턴합니다.

아래 예제에서 biPredicate1.or(biPredicate2).test(10, 9)는 biPredicate1, biPredicate2 중에 하나라도 True가 되면 True를 리턴합니다.

import java.util.function.BiPredicate;

public class BiPredicateExample3 {

    public static void main(String[] args) {

        BiPredicate<Integer, Integer> biPredicate1 = (n1, n2) -> n1 > n2;
        BiPredicate<Integer, Integer> biPredicate2 = (n1, n2) -> n1 * n2 > 100;

        boolean result = biPredicate1.or(biPredicate2).test(10, 9);
        System.out.println(result);

        result = biPredicate1.or(biPredicate2).test(9, 10);
        System.out.println(result);
    }
}

Output:

true
false

5. negate()로 다수의 BiPredicate 연산

negate()는 BiPredicate가 리턴하는 값과 반대되는 값을 리턴하는 Predicate를 리턴합니다. 논리연산자의 NOT이 BiPredicate 앞에 붙는다고 생각할 수 있습니다. 즉, 논리적으로 반대되는 BiPredicate를 만들 때 사용할 수 있습니다.

import java.util.function.BiPredicate;

public class BiPredicateExample4 {

    public static void main(String[] args) {

        BiPredicate<Integer, Integer> biPredicate1 = (n1, n2) -> n1 > n2;
        BiPredicate<Integer, Integer> biPredicate2 = biPredicate1.negate();

        boolean result = biPredicate1.test(10, 9);
        System.out.println(result);

        result = biPredicate2.test(10, 9);
        System.out.println(result);
    }
}

Output:

true
false
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha