람다가 하는 일이 기존 메소드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서 매운 간결하게 표현할 수 있다.
스태틱 메소드 참조 | 타입:: 스태틱 메소드 |
특정 객체의 인스턴스 메소드 참조 | 객체 레퍼런스:: 인스턴스 메소드 |
임의 객체의 인스턴스 메소드 참조 | 타입:: 인스턴스 메소드 |
생성자 참조 | 타입:: new |
// 생성자 참조
Supplier<Greeting> newGreeting = Greeting::new;
// 위의 식을 썼다고 Gretting 객체가 생기는 것이 아니다.
Greeting greeting2 = newGreeting.get();
// 위와 같이 get() 함수를 사용해야 Greeting 객체를 만들 수 있다.
// 생성자 참조
Function<String, Greeting> hyunsikGreeting = Greeting::new;
Greeting hyunsik = hyunsikGreeting.apply("hyunsik");
// 스태틱 메소드 참조
UnaryOperator<String> hi = Greeting::hi;
String hiHyunsik = hi.apply("hyunsik");
// 특정 객체의 인스턴스 메소드 참조
Greeting greeting = new Greeting();
UnaryOperator<String> hello = greeting::hello;
String hi2Hyunsik = hello.apply("hyunsik");
// 임의 객체(불특성 다수)의 인스턴스 메소드 참조
String[] names = {"hyunsik", "aaa", "bbb"};
Arrays.sort(names, String::compareToIgnoreCase);
System.out.println(Arrays.toString(names));