하나의 메소드만 호출하는 람다식은 메소드 참조로 더 간단히!! 할 수 있다.
✨✨클래스명::메소드명
종류 | 람다 | 메소드 참조 |
---|---|---|
static메소드 참조 | (x) -> ClassName.method(x) | ClassName::method |
인스턴스메소드 참조 | (obj.x) -> obj.method(x) | ClassName::method |
특정 객체 인스턴스메소드 참조 | (x) -> obj.method(x) | obj::method |
static메소드
참조Integer method(String s) { //그저 Integer.parseInt(String s)만 호출
return Integer.parseInt(s);
}
...
...
int result = obj.method("123");
int result = Integer.parseInt("123");
//위 둘은 같은 거
Function<String, Integer> f = (String s) -> Integer.parseInt(s);
int result = f.apply("100"); //100
String
)과 출력(Integer
)의 정보가 있기에, 우항의 타입이 필요없다!!parseInt()
) 참조Function<String, Integer> f = Integer::parseInt; int result = f.apply("100"); //100
✨객체 생성할 때!!
✨✨✨객체이름::new
Supplier<MyClass> s = () -> new MyClass();
System.out.println(s.get()); //MyClass@주소....
Supplier<MyClass> s = MyClass::new; System.out.println(s.get()); //MyClass@주소....
Function<Integer, MyClass> f = (i) -> new MyClass(i);
Function<Integer, MyClass> f = MyClass::new; //만약 매개변수가 두개라면?? BiFunction<Integer, String, MyClass> f = MyClass::new;
Function<Integer, int[]> f = (x) -> new int[x];
Function<Integer, int[]> f = int[]::new;
배열타입[]::new
ex14_05_0
import java.util.function.Function;
import java.util.function.Supplier;
public class Ex14_05_0 {
public static void main(String[] args) {
//매개변수 없는 생성자
Supplier<MyClass1> s = () -> new MyClass1();
Supplier<MyClass1> s1 = MyClass1::new;
System.out.println(s.get());
System.out.println(s.get().iv);
System.out.println(s1.get());
System.out.println(s1.get().iv);
//매개변수 있는 생성자
Function<Integer, MyClass1> f = (i) -> new MyClass1(i);
Function<Integer, MyClass1> f1 = MyClass1::new;
System.out.println(f.apply(100));
System.out.println(f.apply(100).iv);
System.out.println(f1.apply(200));
System.out.println(f1.apply(200).iv);
//배열 생성
//***배열을 생성할 땐 꼭 Function!! 배열의 길이Integer가 필요하기 때문에
Function<Integer, int[]> f2 = (x) -> new int[x];
Function<Integer, int[]> f3 = int[]::new;
System.out.println(f2.apply(55));
System.out.println(f2.apply(55).length);
System.out.println(f3.apply(66));
System.out.println(f3.apply(66).length);
}
}
class MyClass1{
int iv;
MyClass1(){ this.iv = 777; }
MyClass1(int i){ this.iv = i;}
}
MyClass1@7adf9f5f
777
MyClass1@85ede7b
777
MyClass1@6b884d57
100
MyClass1@38af3868
200
[I@33c7353a
55
[I@681a9515
66