java.util.function 패키지 내에는 일반적으로 사용되는 형식의 메서드가 함수형 인터페이스로 구현되어 있다.
가능하면 이 패키지의 인터페이스를 사용하는 것이 좋다.
그래야만 코드의 통일성이 높아져 유지보수성을 높일 수 있기 때문이다.
그 중 Predicate는 조건식을 표현하는데 사용된다.
매개변수는 하나이며, 반환 타입은 boolean 이다.
1. test()
@Test
@DisplayName("test()를 활용한 양수 확인")
void test() {
Predicate<Integer> isPositive = n -> n > 0;
assertThat(isPositive.test(3)).isTrue();
}
2. and()
@Test
@DisplayName("and()를 활용한 두 개의 조건 확인")
void and() {
Predicate<Integer> isPositive = n -> n > 0;
Predicate<Integer> isBiggerThanFive = n -> n > 5;
assertThat(isPositive.and(isBiggerThanFive).test(3)).isFalse();
assertThat(isPositive.and(isBiggerThanFive).test(6)).isTrue();
}
3. negate()
@Test
@DisplayName("negate()를 이용한 음수 확인")
void negate() {
Predicate<Integer> isPositive = n -> n > 0;
Predicate<Integer> isNotPositive = isPositive.negate();
assertThat(isNotPositive.test(-1)).isTrue();
}
4. or()
@Test
@DisplayName("or()를 활용한 두 개의 조건 확인")
void or() {
Predicate<Integer> isPositive = n -> n > 0;
Predicate<Integer> isNegative = n -> n < 0;
assertThat(isPositive.or(isNegative).test(5)).isTrue();
assertThat(isPositive.or(isNegative).test(-5)).isTrue();
}
5.isEqual()
@Test
@DisplayName("isEqual()를 활용한 같은 값 확인")
void isEqual() {
Predicate<Integer> isPositive = n -> n > 0;
long cnt = IntStream.range(-3, 3).boxed().filter(isPositive).count();
assertThat(cnt).isEqualTo(2);
}
https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html
Predicate (Java Platform SE 8 )
Returns a composed predicate that represents a short-circuiting logical OR of this predicate and another. When evaluating the composed predicate, if this predicate is true, then the other predicate is not evaluated. Any exceptions thrown during evaluation
docs.oracle.com
'개발' 카테고리의 다른 글
[Java] UnaryOperator, BinaryOperator 함수형 인터페이스 (0) | 2022.06.27 |
---|---|
[Java] Supplier, Consumer, Function 함수형 인터페이스 (0) | 2022.06.27 |
IntelliJ에서 JUnit, AssertJ 프로젝트 생성하기 (0) | 2022.06.27 |
[Java] HashMap 내부 코드에 존재하는 transient 키워드 (0) | 2022.06.23 |
Short-circuit evaluation과 Sequence Point (0) | 2022.03.13 |