● 람다식이 두개 일 경우에는 중괄호 생략 불가 입니다.
Comparator<String> comp = (o1, o2) -> o1.length() - o2.length();
Collections.sort(list1,(o1, o2) -> o1.length() - o2.length() );
Collections.sort(list1,comp);
두개다 똑같은 방법이다.
● 매개변수가 둘 인 람다식
interface Calculate{
void cal(int a, int b);
}
public class Main3 {
public static void main(String[] args) {
Calculate 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);
}
}
● 가변인자를 생성해서 해도 된다.
public static void doA(Calculate c, int a, int b){
c.cal(a,b);
}
public static void doB(Calculate c, int ...a){
c.cal(a[0],a[1]);
}
public static void main(String[] args) {
doA((a, b) -> System.out.println(a+b),10,20);
doA((a, b) -> System.out.println(a-b),20,10);
doB((a, b) -> System.out.println(a*b),20,10);
● 매개변수 가 있고 반환하는 람다식
interface RetCalcu {
int cal(int a, int b);
}
public static void main(String[] args) {
RetCalcu rcc = (a, b) -> {
return a + b;
};
RetCalcu rcc1 = (a, b) -> a - b;
System.out.println(rcc1.cal(4,3));
System.out.println();
int result = rcc.cal(5,5);
System.out.println(result);
System.out.println(rcc.cal(5,5));
● 매개변수가 없는 람다식
interface AA{
int gen();
}
public static void main(String[] args) {
AA aa = () ->{
return new Random().nextInt(50);
};
System.out.println(aa.gen());
System.out.println();
List<Integer> list = Arrays.asList(aa.gen(),aa.gen(),aa.gen());
System.out.println(list);
랜덤한 숫자를 출력하게 되고
그걸 list에 담아서 출력하게 된다.
● 함수형 인터페이스
@FunctionalInterface // 매서드 하나 들어가있다 라는걸 알려준다.
interface AA{
int gen();
}
● 람다식과 제네릭
interface Calculater<T> {
void cal(T a, T b);
}
public class Main4 {
public static void main(String[] args) {
Calculater<Integer> cct = (a, b) -> System.out.println(a + b);
cct.cal(5, 5);
Calculater<Double> cct1 = (a, b) -> System.out.println(a + b);
cct1.cal(5.0, 5d);
Calculater<String> cct2 = (a, b) -> System.out.println(a + b);
cct2.cal("하하", "호호");
}
}
제네릭을 사용해서 타입을 바꿀 수 있다.
'java' 카테고리의 다른 글
스트림의 이해와 생성 (1) | 2024.02.15 |
---|---|
미리 정의되어 있는 함수형 인터페이스 (1) | 2024.02.13 |
람다의 방식 (0) | 2024.02.07 |
이너 클래스(멤버 로컬 익명) (0) | 2024.02.07 |
네스티스(중첩) 클래스 (0) | 2024.02.07 |