본문 바로가기
java

람다와 함수형 인터페이스

by improve 2024. 2. 8.

● 람다식이 두개 일 경우에는 중괄호 생략 불가 입니다.

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