본문 바로가기

수업 & 공부

lambda

 

람다식 (Lambda)

( java8 에서 지원하기 된 lambda )

//람다식의 구조
{데이터 타입 매개변수, ... } -> { 실행문 , ...}

좌측 매개변수를 사용하여 -> 우측 중괄호 {} 부분을 실행한다

람다식을 사용하는 이유는 불필요한 클래스 정의도 필요없고 메소드도 필요가 없다.

그래서 람다는 익명함수라고도 불린다.

 

@FunctionalInterface

추상 메서드가 오직 하나인 함수형 인터페이스

위 어노테이션은 해당 인터페이스가 함수형 인터페이스 조건에 맞는지 검사

즉 컴파일러에 추상 메서드가 하나만 있는지 확인하게한다

 

아래는 함수형 인터페이스를 통해 더하기와 제곱을 계산하는 람다식 예제

public class lambdaExam {
    public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       int num1 = sc.nextInt();
       int num2 = sc.nextInt();

        myCalc sum = (a,b) -> {return a+b; };
        System.out.println(sum.calc(num1,num2));

        myCalc2 multi = a -> {return a*a;};
        System.out.println(multi.calc(num1));
        sc.close();
    }

    @FunctionalInterface
    interface myCalc{
        int calc(int x, int y);
    }
    @FunctionalInterface
    interface myCalc2{
        int calc(int x);
    }
}

 

 

 

자바에서 제공하는 함수형 인터페이스

 

1. cumsumer<T>

입력값은 있지만 리턴은 없다

객체 T를 매개변수로 받는다.

앞에 데이터 타입이 명시되어 있어 구분이 쉽다

 

 

2. supplier

입력 값은 없고 리턴은 있다

public class ConsumerSupplier {

    public static void main(String[] args) throws IOException {

        //Consumer<T>
        //사용 후 반환x (void)
        Consumer<String> c = name -> System.out.println(name+"hello");
        c.accept("hello java");

        IntConsumer ic = page -> System.out.println("int ic test " + page);
        ic.accept(54);

        //Supplier<T>
        //입력값은 없고 반환값만
        Supplier<String> ss = () -> "supplier interface have return";
        String result1 = ss.get();
        System.out.println(result1);

        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(bf.readLine()," ");
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        BooleanSupplier bs = () -> a>b;
        boolean resultBs = bs.getAsBoolean();
        System.out.println(resultBs);
        bf.close();
    }
}

 

 

3. Function<T, R>

제공하는 apply 메소드로 객체 T를 입력받아 R로 매핑한다.

기본 데이터 타입 + Function (intFunction<R> ...등)

기본 데이터 타입을 입력받아 다른 기본 데이터 타입으로 반환

 

 

4. Operator 타입

매개변수를 입력받아 계산 후 리턴값을 돌려준다.

Function의 apply 메소드와 달리 연산 수행 후 동일타입 반환 값

public class FunctionOperator {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(bf.readLine()," ");
        int inputN = Integer.parseInt(st.nextToken());

        //Function<T,R>
        //T= 매개변수 를
        //R= 반환값 으로 변환하여 반환
        Function<Integer, String> integerToString = num -> Integer.toString(num);
        String str = integerToString.apply(inputN);
        System.out.println("Integer to str " + str);

        int strToInt = StrToInt(str);
        System.out.println("str to int " + strToInt );
        System.out.println(strToInt == inputN);

        //Operator 타입
        //UnaryOperator<T> 객체 하나를 연산하여 T타입 return
        UnaryOperator<Integer> uo = num -> {return num*10;};
        int resultNum = uo.apply(strToInt);
        System.out.println(resultNum);
        bf.close();
    }

    private static int StrToInt(String str) {
        ToIntFunction<String> strToInt = Integer::parseInt;
        return strToInt.applyAsInt(str);
    }
}

 

 

 

 


 

 

[Java] 람다식(Lambda Expressions) 사용법 및 예제

자바8에서 '람다식(Lambda Expression)'이 지원되면서 자바는 완전히 새로운 언어처럼 보이기 시작했다. 지네릭스(Generics)가 자바을 크게 변화시킨 것처럼 람다식 역시 자바를 어마어마하게 변화시켰

hbase.tistory.com

 

 

[JAVA] JAVA의 람다식 사용법 및 다양한 작성 예제 | Yoon's Dev

JAVA의 람다식(lambda) 사용법 및 다양한 작성 예제 Java의 람다식 ■ 자바의 람다식 ✓ 람다식(lambda) - 자바에서는 함수를 메서드라고 부르고 메서드의 형태로 존재 - 자바 람다식의 구조  . (argument)

yooniron.tistory.com

 

 

Java 8 함수형 인터페이스 (Functional Interface)

Overview 함수형 인터페이스란 1 개의 추상 메소드를 갖는 인터페이스를 말합니다. Java8 부터 인터페이스는 기본 구현체를 포함한 디폴트 메서드 (default method) 를 포함할 수 있습니다. 여러 개의 디

bcp0109.tistory.com

 

'수업 & 공부' 카테고리의 다른 글

Stream  (0) 2022.10.03
Thread (lambda)  (0) 2022.10.03
Wrapper Class란  (0) 2022.09.29
Java - Collection  (0) 2022.09.29
동적 계획법 알고리즘 (Dynamic Programming)  (0) 2022.09.06