레알윙 2020. 7. 7. 23:47
반응형

람다가 하는 일이 기존 메소드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서 매우 간결하게 표현할 수 있다.

 

 

메소드 참조하는 방법

스태틱 메소드 참조

타입::스태틱 메소드

특정 객체의 인스턴스 메소드 참조

객체 레퍼런스::인스턴스 메소드

임의 객체의 인스턴스 메소드 참조

타입::인스턴스 메소드

생성자 참조

타입::new

 

  • 메소드 또는 생성자의 매개변수로 람다의 입력값을 받는다.
  • 리턴값 또는 생성한 객체는 람다의 리턴값이다.

 

참고

 

예제

import java.util.Arrays;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.function.UnaryOperator;

public class App {

	public static void main(String[] args) {

		// Greeting의 함수를 사용
		UnaryOperator<String> hi = (s) -> "hi ";
		UnaryOperator<String> hi2 = Greeting::hi;
		System.out.println(hi.apply("하이1"));
		System.out.println(hi2.apply("하이2"));

		Greeting greting = new Greeting();
		// hello 참조
		UnaryOperator<String> hello = greting::hello;
		System.out.println(hello.apply("헬로ㄸ@"));
		
		// 파라미터 있는 생성자
		Function<String, Greeting> jinSeokGreeting = Greeting::new;
		Greeting jinSeok = jinSeokGreeting.apply("JinSeok");
		System.out.println(jinSeok.getName());
		
		// 파라미터 없는 생성자 참조
		Supplier<Greeting> newGreeting = Greeting::new;
		
		
		//임의 객체의 인스턴스 메소드 참조(불특정 다수)
		String[] names = {"JinSeok", "JinSeok2", "Handsome"};

		
		
//		Arrays.sort(names, new Comparator<String>() {
//			@Override
//			public int compare(String o1, String o2) {
//				여기서 두개의 값을 비교하여 return(음수, 0, 양수)
//				return 0;
//			}
//		});
		
		Arrays.sort(names, String::compareToIgnoreCase);
		
		System.out.println(Arrays.toString(names));
	}

}
반응형