■ 람다의 다양한 표현식
interface Printable {
void print(String s); // 매개변수 하나, 반환형 void
}
public class OneParamNoReturn {
public static void main(String[] args) {
Printable p;
// 줄임 없는 표현
p = (String s) -> {
System.out.println(s);
};
p.print("Lambda exp one.");
// 중괄호 생략
p = (String s) -> System.out.println(s);
p.print("Lambda exp two.");
// 매개변수형 생략
p = (s) -> System.out.println(s);
p.print("Lambda exp three.");
// 매개변수 소괄호 생략
p = s -> System.out.println(s);
p.print("Lambda exp four.");
}
}
메소드의 몸체가 둘 이상의 문장으로 이루어져 있거나, 매개변수의 수가 둘 이상인 경우에는
각각 중괄호와 소괄호의 생략이 불가능하다.
interface Calculate {
void cal(int a, int b);
}
public class TwoParamNoReturn {
public static void main(String[] args) {
Calculate c;
c = (a, b) -> System.out.println(a + b);
c.cal(4, 3);
c = (a, b) -> System.out.println(a - b);
c.cal(4, 3);
c = (a, b) -> System.out.println(a * b);
c.cal(4, 3);
}
}
매개변수가 둘 이상일 경우에는 소괄호가 있어야 한다.
interface Calculate {
int cal(int a, int b);
}
public class TwoParamAndReturn {
public static void main(String[] args) {
Calculate c;
c = (a, b) -> {
return a + b;
};
System.out.println(c.cal(4, 3));
c = (a, b) -> a + b;
System.out.println(c.cal(4, 3));
}
}
return 문이 메소드의 몸체를 이루는 유일한 문장일 경우에만 위와 같이 작성이 가능하다.
import java.util.Random;
interface Generator {
int rand(); // 매개변수 없는 메소드
}
public class NoParamAndReturn {
public static void main(String[] args) {
Generator gen = () -> {
Random rnad = new Random();
return rand.nextInt(50);
};
System.out.println(gen.rand());
}
}
매개변수가 없는 람다식의 경우 소괄호 안을 비우면 된다.
interface Calculate<T> {
T cal(T a, T b);
}
public class LambdaGeneric {
public static void main(String[] args) {
Calculate<Integer> ci = (a, b) -> a + b;
System.out.println(ci.cal(4, 3));
Calculate<Double> cd = (a, b) -> a + b;
System.out.println(cd.cal(4.32, 3.45));
}
}
인터페이스가 제네릭으로 정의되어 있으므로, 위와 같이 참조변수의 형을 지정해주어야 한다.
'Language > Java' 카테고리의 다른 글
메소드 참조 (0) | 2023.03.06 |
---|---|
함수형 인터페이스 (0) | 2023.03.03 |
람다 1 (0) | 2023.02.28 |
네스티드 클래스와 이너 클래스 (0) | 2023.02.27 |
컬렉션 프레임워크 5 (0) | 2023.02.24 |