1. 람다식은 기본적으로 익명객체이다.
Object obj = new Object(){
int max(int a, int b){
return a > b ? a : b;
}
}
obj.max((x,y) -> a > b ? a : b);
그렇지만 Object에는 max라는 함수가 없다.
2. 그래서 인터페이스가 필요하다.
-> Stream 과 IntStream인터페이스 등에 함수가 정의되어 있고 구현도 따로 되어 있다.
Optional<T> min(Comparator<? super T> var1);
Optional<T> max(Comparator<? super T> var1);
그러나 커스텀하게 구현하려면
public static void main(String[] args){
MyFunction2 f = (a,b) -> a > b ? a: b;
}
@FunctionalInterface
interface MyFunction2{
int max(int a, int b);
}
이렇게 쓸 수도 있다.
3. Stream 클래스를 이용해서 이런 식으로 쓰인다.
int min = list.stream().min(Integer::compareTo).orElse(-1);
*Integer::compareTo는 compare(x,y)를 반환하므로 Integer::compare과 같다.