JAVA

람다 함수(with 메서드 참조)

쿠카이든 2022. 2. 14. 11:35
728x90
  • 람다식이 하나의 메서드만 호출하는 경우에는 메서드 참조(method reference)라는 방법으로 람다식을 간략히 할 수 있다.
  • //예1) static 메서드 참조
    (기존) Function<String, Ingeter> f = (String s) -> Integer.parseInt(s); //람다식
    (변경) Function<String, Integer> f2 = Integer::parseInt;                //메서드 참조
    
    //예2) 인스턴스 메서드 참조
    (기존) BiFunction<String, String, Boolean> f = (s1, s2) -> s1.equals(s2); //람다식
    (변경) BiFunction<String, String, Boolean> f2 = String::equals;           //메서드 참조
    
    //예3) 특정 객체 인스턴스 메서드 참조
    MyClass obj = new MyClass();
    (기존)Function<String, Boolean> f = (x) -> obj.equals(x);   //람다식
    (변경)Function<String, Boolean> f2 = obj::equals;           //메서드 참조
    • 컴파일러는 생략된 부분을 우변의 선언부 또는 좌변의 Function 인터페이스에 지정된 지네릭 타입으로 부터 유추할 수 있다.
    • 결론적으로 하나의 메서드만 호출하는 람다식은 ‘클래스이름::메서드이름’ 또는 ‘참조변수::메서드이름’으로 바꿀 수 있다.
  • 생성자의 메서드 참조
    • 생성자를 호출하는 람다식도 메서드 참조로 변환할 수 있다.
예)
Supplier<MyClass> s = () -> new MyClass();  //람다식
Supplier<MyClass> s = MyClass::new;         //메서드 참조

예2) 매개변수가 있는 생성자인 경우
Function<Integer, MyClass> f = (i) -> new MyClass(i);   //람다식
Function<Integer, MyClass> f2 = MyClass::new;           //매서드 참조

 

728x90