Java8의 Function 인터페이스 학습(compose 및 andThen)
4257 단어 집합 원본 학습
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라는 정적 방법을 통해 현재 실행 방법을 얻을 수 있다.