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
Loading script...
Related Posts
- Java - Stream을 배열로 변환
- Java 8 - Stream의 병렬처리(Parallel)
- Java Stream - findAny()와 findFirst()의 차이점
- Java 8 - BiConsumer 예제
- Java 8 - Consumer 예제
- Java 8 - BinaryOperator 예제
- Java 8 - BiPredicate 예제
- Java 8 - UnaryOperator 예제
- Java 8 - Predicate 예제
- Java 8 - Supplier 예제
- Java 8 - Stream을 List로 변환
- Java 8 - BiFunction 예제
- Java 8 - Function 예제
- Java8 - Interface의 Default Methods 이해하기
- Java8 - 함수형 인터페이스(Functional Interface) 이해하기
- Java8 - 메소드 레퍼런스(Method Reference) 이해하기
- Java8 - SummaryStatistics 예제 및 사용 방법 (count, min, max, average)
- Java8의 Stream Collect 사용 방법 및 예제
- Java8의 Stream reduction 사용 방법 및 예제
- Java8의 Stream find, match 사용 방법 및 예제
- Java8의 Optional 사용 방법 및 예제
- Java8의 Stream max, min 사용 방법 및 예제
- Java8의 Stream sorted 사용 방법 및 예제
- Java8의 Stream concat 사용 방법 및 예제
- Java8의 Stream distinct 사용 방법 및 예제
- Java8의 Stream limit과 skip 사용 방법 및 예제
- Java8 Stream의 filter와 map, flatMap 사용 방법 및 예제
- Java8의 Stream 생성 방법 및 예제