DBILITY

java lambda 본문

java/basic

java lambda

DBILITY 2018. 5. 25. 20:22
반응형

자바는 매개변수로 인스턴스만 전달 가능했다.
첫번째 쓰레드를 보면 run 메서드만 실행하려 해도 방법이 없으므로,
Runnable객체를 생성해서 전달한다.
람다식은 함수를 매개변수로 넘길 수 있도록,
인터페이스 중 단 하나의 메서드만 존재하는 함수형 인터페이스 (@FunctionalInterface)를 준비
익명메서드로 전환한다.

자바 람다는 핵심적인 3개의 부분으로 구성
( "함수의 인자"->"함수의 내부 구현코드" )

괄호 안의 매개 변수 집합,
화살표.
그리고, 하나의 표현식이거나 코드 블록이 될 수 있는 바디
※ 매개변수는 타입을 명시하지 않을 경우 타입을 추론한다.

  Interface가 하나만 존재해야 하는 이유이기도 하나보다.

 

람다식 형태

  • ( parameters ) -> expression body
  • ( parameters ) -> { expression body }
  • () -> { expression body }
  • () -> expression body
package com.dbility.bigdata.lambda.test;
 
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;
import java.util.TimeZone;
 
public class Test01 {
 
    public static void main(String[] args) {
 
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello World~");
            }
        }).start();
 
        final String str1 = "Hello Java8 Lambda Expression 1";
 
        String str2 = "Hello Java8 Lambda Expression 2";
 
         /* 외부변수 포획, 값이 변하지 않아야함 */
        new Thread(()->{ System.out.println(str1); }).start();
 
        /* 값이 변한다면 컴파일러 오류 발생함. 변하지 않는 다면 사실상 final로 간주 */
        //str2 = "No~~~~"; //str2의 주석을 해제하면 바로 아래 컴파일러 오류 발생
        new Thread(()->System.out.println(str2)).start();
 
        new Thread(() -> { System.out.println("Hello Java8 Lambda Expression 3"); }).start();
 
        new Thread(() -> System.out.println("Hello Java8 Lambda Expression 4")).start();
 
        /* 타입추론
         * 괄호안에 타입지정이 없음
         * Comparator.compare는 사전순서로 문자열을 비교하는 method로 API를 확인해 보면 @FunctionalInterface 있음
         * 이전이면 음수 같으면 0 이후면 양수 반환
         **/
        Comparator<String> c = (l,r)->{
            System.out.println(l + " compare to " + r);
            return l.compareTo(r);
        };
 
        int result = c.compare("a", "b");
 
        System.out.println(result);
 
    }
 
}

 

반응형
Comments