람다식(2) / 메소드 참조

람다식(2) / 메소드 참조

package lambdaEx; public class Ex101_MethodReference { public static String convert(Integer num, Conversion f) { return f.convert(num); } public static void main(String[] args) { // 메소드 참조 // 정수를 문자열로 변환 // Conversion c = (n) -> {return String.valueOf(n);}; Conversion c = n -> String.valueOf(n); String s = c.convert(100); System.out.println(s); Conversion c2 = String::valueOf; s = c2.convert(200); System.out.println(s); } } interface Conversion { public String convert(Integer num); }

- String.valueOf(n) 을 String::valueOf 로 바꾼게 메소드 참조이다.

package lambdaEx; import java.util.function.Supplier; public class Ex102_ConstructorReference { public static void main(String[] args) { // Supplier = 매개변수가 없고 리턴값이 있는 추상 메소드 // 람다식 Supplier o1 = () -> new Object(); Object ob1 = o1.get(); System.out.println(ob1); // 생성자 메소드 참조 Supplier o2 = Object::new; Object ob2 = o2.get(); System.out.println(ob2); } }

- 매개변수가 없고 리턴값이 있는 추상 메소드를 참조 해보자.

- 람다식으로 표현 먼저 해보면 Supplier << 매개변수 없고 리턴값 있는 추상 메소드를 가진 인터페이스

- 객체 생성하고 바로 람다식으로 매개변수 없으니까 () 괄호 열어주고 생성자를 호출 한다.

- () -> new Object() << 람다로 생성자 호출 하는 법

이걸 람다식이 아니라 메소드 참조로 바꾸면

- Object::new 하나로 끝난다. << 메소드 참조로 생성자 호출 하는 법

package lambdaEx; import java.util.function.BiFunction; public class Ex103_InstanceReference { public static void main(String[] args) { // 람다식 // Bifunction : 두개의 매개변수 T,U과 리턴값 R이 있는 추상 메소드 BiFunction f1 = (s1, s2) -> s1.equals(s2); Boolean b1 = f1.apply("java", "java"); System.out.println(b1); // 인스턴스 메소드 참조 BiFunction f2 = String::equals; Boolean b2 = f2.apply("java", "java"); System.out.println(b2); } }

- 인스턴스 메소드 참조 해보기

from http://heidong.tistory.com/74 by ccl(A) rewrite - 2021-09-10 22:01:35