본문 바로가기

Java/JRE

람다식 - 기본 -

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과 같다.