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