ex)
int max(int a, int b) {
return a > b ? a : b;
}
--->>> (a,b) -> a > b ? a : b
int max(int a, int b) {
return a > b ? a : b;
}
-------->
(int a, int b) -> {
return a > b ? a : b;
}
(int a, int b) -> {
return a > b ? a : b;
}
--------->
(int a, int b) -> a > b ? a : b
(int a, int b) -> a > b ? a : b
--------->
(a, b) -> a > b ? a : b
(a) -> a * a --> a -> a * a //OK
(int a) -> a * a --> int a -> a * a // 에러
(int i) -> {
System.out.println(i)
}
------>
(int i) -> System.out.println(i)
단, 하나뿐인 문장이 return문이면 괄호 {} 생략 불가
(a, b) -> a > b ? a : b
== 둘은 같다.
new Object() {
int max(int a, int b) {
return a > b ? a : b;
}
}
Object obj = new Object() {
int max(int a, int b) {
return a > b ? a : b;
}
};
--
Object obj = (a, b) -> a > b ? a : b;
int value = obj.max(3, 5); // 에러, Object클래스엔 max()가 없다.
@FunctionalInterface
interface MyFunction {
public abstract int max(int a, int b);
}
--> 이것을 구현
MyFunction f = new MyFunction() { // 익명 클래스의 선언과 객체 생성을 동시에 함.
public int max(int a, int b) {
return a > b ? a : b;
}
};
int value = f.max(3 ,5); // OK. MyFunction에 max()가 있음
MyFunction f = (a, b) -> a > b ? a : b;
int value = f.max(3, 5); // 실제로는 람다식(익명 함수)이 호출 됨
void aMethod(MyFunction f) {
f.myMethod(); // MyFunction에 정의된 메서드 호출
}
MyFunction f = () -> System.out.println("myMethod()");
aMethod(f);
--> 더 짧게 가능
aMethod( () -> System.out.println("myMethod()") );
MyFunction myMethod() { // 이 메서드는 람다식을 반환한다는 뜻
MyFunction f = () -> {};
return f;
}
--> 더 짧게 가능
MyFunction myMethod() {
return () -> {};
}