표준 API Functional Interface
- Consumer : 매개 값 O, 리턴 값 X
- Supplier : 매개 값 X, 리턴 값 O
- Function : 매개 값 O, 리턴 값 O, 매핑에 사용
- Operator : 매개 값 O, 리턴 값 O, 연산에 사용
- Predicate : 매개 값 O, 리턴 값 O, True, False 반환
andThen()과 compose() 메소드
- Consumer, Function, Operator는 두 개의 함수적 인터페이스를 순차적으로 연결하고 첫번째 결과 값을 두번째 인자로 사용할때 활용한다.
- andThen()은 인터페이스A.andThen(인터페이스B)로 실행했을 때 A의 결과값을 B의 인자 값으로 사용하여 최종 결과를 출력한다.
- compose()는 인터페이스A.andThen(인터페이스B)로 실행했을 때 B의 결과값을 A의 인자 값으로 사용하여 최종 결과를 출력한다.
and(), or(), negate(), isEqual() 메소드
- Predicate 함수적 인터페이스는 and(), or, negate(), isEqual() 디폴트 메소드를 갖고 있다.
- and는 && 연산을 or은 || 연산을 negate는 ! 연산을, isEqual은 객체 비교 연산을 나타낸다.
minBy(), maxBy() 메소드
- BinaryOperator는 minBy()와 maxBy() 메소드를 갖고 있다.
- minBy()와 maxBy()의 인자 값으로는 Comparator< ? super T>를 사용한다.
- 두개의 값 중 minBy는 최소값을 maxBy는 최대 값을 리턴한다.
메소드 참조
- 메소드 참조는 매개 변수의 정보 및 리턴 타입을 알아내어, 람다식에서 불필요한 매개 변수를 제거하는 것이 목적이다.
- 람다식으로 Math.max를 사용하면 이와 같다. (l, r) -> Math.max(l,r);
- 메소드 참조를 통해서 사용하면 IntBinaryOperator oper = Math :: max 와 같다.
- 정적 메소드를 참조할 경우에는 클래스 이름뒤에 :: 를 붙이고 정적 메소드를 기술한다. Math :: max
- 인스턴스 메소드를 참조하는 경우, 먼저 객체를 생성하고 참조변수에 :: 를 붙이고 메소드를 기술한다. variable :: getName
생성자 참조
- 생성자 역시 메소드 참조와 같이 참조 할 수 있다.
- (a,b) -> {return new Clazz(a,b);} 를 Clazz :: new 와 같이 나타낼 수 있다.
- 생성자가 오버로딩되어 여러개 있는 경우, 컴파일러는 함수적 인터페이스의 추상 메소드와 동일한 매개 변수 타입과 개수를 가지고 있는 생성자를 찾아 실행한다.
Function<String, Member> function1 = Member :: new;
Member member1 = function1.apply("name", 23);
Reference : https://docs.oracle.com/javase/8/docs/api/ java.util.function 패키지 검색