Java 8 - BiPredicate 예제

By JS | Last updated: May 30, 2021

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);

    ....
}

Example 1 : test()

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

Example 2 : and()

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

Example 3 : or()

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

Example 4 : negate()

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

References

댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha