본문 바로가기

개발

[Java] Predicate 함수형 인터페이스

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