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
'개발' 카테고리의 다른 글
[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 |