본문 바로가기

개인적으로 공부한 것을 정리해 놓은 블로그입니다 틀린 것이 있으면 댓글 부탁 드립니다!


JAVA

JAVA 스터디 21 - Predicate의 결합

반응형

 

 

predicate는 조건식을 정의할 때 사용하는 함수형 인터페이스다

 

연산자의  && (and)  , || (or) 와 같이  and(), or() , negate()로 두 Predicate를 하나로 결합(default 메서드) 할 수 있다.

 

예제 코드


import java.util.function.Predicate;

public class PredicateExam {

    public static void main(String[] args) {
        //세개의 Predicate 를 구현하였다.
        Predicate<Integer> a = i->i<100;
        Predicate<Integer> b = i->i<200;
        Predicate<Integer> c = i-> i%2 == 0 ;

        //negate() 반대로 만든다 i<100 을 i>=100 으로 바꾼다.
        //연산자의 !와 같다.
        Predicate<Integer> notA = a.negate();
        //i>=100 && i<200 || i%2 == 0;
        Predicate<Integer> all = notA.and(b).or(c);
        //i>=100 && (i<200 || i%2==0)
        Predicate<Integer> all2 = notA.and(b.or(c));

        //predicate를 수행하기 위해선 predicate의 default메서드인
        // test()를 사용해야한다.

        //2>=100  false
        System.out.println(notA.test(2));
        // 20>=100 false && 20<200 true ||20%2 ==0 true
        // 최종값 true
        System.out.println(all.test(20));
        //40>=100(false) && (40<200(true) || 40%2 ==0(true))
        //최종값 false
        System.out.println(all2.test(40));
    }
}

 

isEquals() String 타입 같이 등가비교 필요할 때 사용

-Predicate의 static 메서드로 isEquals()가 정의되어있다

Predicate<String> p = Predicate.isEqual("abc");
        boolean isEqual = p.test("abc");
        //true
        System.out.println(isEqual);

 

 

andThen()을 통한 여러개의  Function<> 인터페이스의 연결 

 

 -Funtion<> 타입은 입력값 출력값이 모두 존재하는 함수형인터페이스다 . 

 -Funtion 인터페이스의 andThen()은 두개의 함수를 연결시켜준다 . 

 

예제코드 

 

import java.util.function.Function;

public class FunctionExam {
    public static void main(String[] args) {
        //두개의 Funtion 인터페이스를 구현 했다.
        //
        Function<String,Integer> a = s -> Integer.parseInt(s,16);
        Function<Integer,String> b = i -> Integer.toBinaryString(i);

        //두개의 Funtion 인터페이스가 andThen으로 합쳐졌다.
        Function<String, String> combinedFunction = a.andThen(b);
        //apply()로 Funtion 인터페이스를 사용한다.
        System.out.println(combinedFunction.apply("a"));
    }
}

 

결과 값은 10의  이진법  표기인 1010이 나온다. 

그림으로 그림으로 보면 아래와 같다. 

두 Function 이 결합되었다 이런식으로 여러개의 함수를 연결 할 수도 있다

주의할 점은 위의 그림의 a의 리턴타입이 interger고 b의 입력타입이 interger 인 것 처럼 첫번째 함수의 리턴타입이 이어지는 함수의 입력타입과 같아야 한다   

반응형