본문 바로가기
Language/Java

람다 2

by Zayne 2023. 3. 2.

■ 람다의 다양한 표현식

 

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