Java8의 Function 인터페이스 학습(compose 및 andThen)

4257 단어 집합 원본 학습
Java8은 함수식 프로그래밍이라는 새로운 기능을 추가했습니다. 저도 요 며칠 동안 천천히 공부하고 있습니다. 지금 Function 인터페이스를 설명해 드리겠습니다.

Function 인터페이스란 무엇입니까?


java8 이후의 인터페이스는 인터페이스 방법의 기본값이 실현될 수 있습니다. 다음과 같습니다. Function 인터페이스 주요 코드와 개인 정리 설명:
/**
 *  , , 
 * @since 1.8
 */
@FunctionalInterface
public interface Function<T, R> {
    /**
     *  
     * 
     * @param t
     * @return
     */
    R apply(T t);

    /**
     *  ( Function) , ( Function)
     */
    default  Function compose(Function super V, ? extends T> before) {
        Objects.requireNonNull(before);
        return (V v) -> apply(before.apply(v));
    }
    /**
     *  , , compose 。
     */
    default  Function andThen(Function super R, ? extends V> after) {
        Objects.requireNonNull(after);
        return (T t) -> after.apply(apply(t));
    }
    /**
     *  
     */
    static  Function identity() {
        return t -> t;
    }
}

위에서 알 수 있듯이 Function류의 구체적인 코드는 네 가지 방법이 있는데 그것이 바로 apply, compose, andThen, identity이다. 구체적인 방법은 코드를 마운트 해제하는 것을 설명한다. 주로 나는 여기서 칠판을 두드리고 싶다. 바로 그들의 반환값이다. apply은 R이다. 즉, 최종 반환 결과를 대표하고 다른 세 가지는 모두 하나Function로 돌아간다.즉, 그들은 더 많은 뒷부분을 끼워 넣을 수 있고 건설자 모델로 클래스를 생성하는 과정과 유사하다.

구체적인 예


너무 추상적이고 확실하다. 여기서 구체적인 예를 들면 이해에 도움이 된다.
    public static void main(String[] args) {
        Function times2 = i -> i*2;
        Function squared = i -> i*i;

        System.out.println(times2.apply(4));
        System.out.println(squared.apply(4));

        System.out.println(times2.compose(squared).apply(4));  //32                 4×4 16×2, apply(4), times2 apply(16), , 。
        System.out.println(times2.andThen(squared).apply(4));  //64                4×2, 8×8, times2 , squared 。

        System.out.println(Function.identity().compose(squared).apply(4));   //16
    }

코드에 약간의 주석이 있습니다. 물론 출력 결과는 다음과 같습니다.
8
16
32
64
16

앞의 두 출력은 비교적 이해하기 쉽다. 바로 매개 변수 값을 방법에 부여한 다음에 apply에서 되돌아온 결과로 출력하면 된다.주로 3, 4개의compose와andThen입니다. 코드 안에 두 개의 수학 계산이 간단하기 때문에 먼저 대략적인 절차를 설명하고 추측해 보면 알 수 있습니다.
compose에서 먼저 squared의 apply(4) 방법을 실행하고 그 결과를 times2에게 16을 실행하도록 합니다×2 의 방법.반면에 andThen은 반대로 영어로 이해한다. 선후 순서, 즉 times2의 apply 방법을 먼저 실행하고 그 결과를 squared의 apply 방법으로 집행한다.이렇게 하면 최종 결과를 얻을 수 있다.
마지막 출력에서compose 방법이 있지만 앞의 Function.identity는 아무런 방법이 없습니다. identity는 단지 하나의 방법을 되돌려 주는 것이기 때문에 squared라는 방법을 실행했을 뿐입니다.
위의 분석을 통해 알 수 있듯이 Function이라는 종류를 이해할 수 있다. 바로 하나의 방법이다. c++ 안의 함수 바늘의 느낌이 있다. 하나의 변수는 하나의 방법을 가리키고 두 가지 방법을 조합하여 사용할 수 있다. (compose와andThen 사용) identity라는 정적 방법을 통해 현재 실행 방법을 얻을 수 있다.

좋은 웹페이지 즐겨찾기