함수를 간단한 식으로 표현
익명함수 이지만 익명객체이다
메서드이름, 반환값있으면 return, 반환타입, 세미콜론 생략 가능
오직 함수형 인터페이스로만 형변환 가능
int max(int a, int b){ =====> (a,b)->a>b?a:b
return a>b?a:b
}
매개변수가 하나인 경우 괄호() 생략가능( 타입이 없을때만)
(a)-> a*a ---------> a->a*a
(int a)-> a*a ---------> 생략불가
블록안에 문장이 하나이면 { } 생략 가능,세미콜론x
(int i){
Sout(i) ; -----------> (int i)->sout(i)
}
★ 3. 익명함수 이지만 익명객체다 (메서드만 따로 존재 할수 없다)
(a,b)->a>b?a:b(메서드만 따로 존재x, 객체필요) --------> new Object(){ int max() }
3-1. 객체를 다루기 위해 참조변수가 필요하다
Object obj= new object(){
int max (){}
}
단 하나의 추상메서드만 선언된 인터페이스
@FunctionalInterface 를 붙여줘야 함수형 인터페이스 완성
인터페이스 메서드는 모두 public abstract
람다식을 다루기 위한 참조변수의 타입은 함수형 인터페이스로
두번째 사진을 MyFunction f= (int a, int b )->a>b?a:b 로 바꿀수 있다.
람다식을 호출할때는 참조변수.메서드이름
void aMethod(MyFunction f){
f.max
}
MyFunction max(){
MtFunction f=()->{};
return f---------------------------------> return ()->{};
}
일반적으로 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 미리 정의해 놓았다.
ex
Supplier<T> S = 람다식 ---> S.get() = 람다식 호출