람다가 하는일이 기존 메소드 또는 생성자르 호출하는 것이라면 메소드 레퍼런스를 사용해서 매우 간결하게 표현 할 수 있다
생성자 참조 -> 타입::new
스태틱 메소드 참조 -> 타입::스태틱 메소드
특정 객체의 인스턴스 메소드 참조 -> 객체 레퍼런스::인스턴스 메소드
임의 객체의 인스턴스 메소드 참조 -> 타입::인스턴스 메소드
메소드 또는 생성자의 매개변수로 람다의 입력값을 받는다
리턴값 또는 생성한 객체는 람다의 리턴값이다
UnaryOperator<String> hi = (s) -> "hi" + s;
UnaryOperator<String> hi = Greeting::hi
Supplier<Greeting> newGreeting = Greeting::new;
Greeting greeting = newGreeting.get();
Function<String, Greeting> woonGreeting = Greeting::new;
Greeting woon = woonGreeting.apply("woonsik");
String[] names = {"wchoi", "dnstlr", "choi"};
//기존에 사용하던 함수형 인터페이스의 추상메소드 사용
Arrays.sort(names, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1 == o2)
return 1;
else
return 0;
}
});
//추상메서드이므로 람다식 적용 가능 , 아래와 같이 변환이 가능
Arrays.sort(names, (o1, o2) -> {
if (o1 == o2)
return 1;
else
return 0;
});
// 다른 기존의 메소드를 참조할수도 있다
// 임의 개수의 인자들이 String의 compateToIgnoreCase라는 메서드를 사용하게 된다
Arrays.sort(names, String::compareToIgnoreCase);