java 8 새로운 기능 입문 부터 응용 제1장 Lambda 표현 식 및 FunctionalInterface 함수 인터페이스

java 8 새로운 기능 입문 부터 응용 제1장 Lambda 표현 식 및 FunctionalInterface 함수 인터페이스
  • Lambda 표현 식
  • lambda 표현 식 의 특징:[^java-초등학생]
  • 자주 사용 되 는 Lambda 표기 법:
  • 함수 인터페이스 함수 인터페이스
  • @FunctionalInterface 주석
  • 자바 8 에 추 가 된 함수 인터페이스
  • 자바 8 은 자바 의 중대 한 버 전 으로 자바 7 이전 버 전에 비해 10 여 가지 업데이트 내용 이 있 으 며 장기 적 인 지원 버 전 으로 각 회사 와 개발 자 들 에 게 받 아들 여 져 주류 가 되 고 있다.Spring boot 2.0 은 자바 8 이전 버 전 을 직접 버 렸 습 니 다.자바 8 을 최소 지원 합 니 다.자바 8 의 매력 적 인 점 을 볼 수 있 습 니 다.이 시 리 즈 는 제 가 자바 8 을 배 우 는 여러 가지 새로운 특성 을 기록 할 것 입 니 다.그리고 이 글 을 읽 는 학생 들 이 자바 8 의 발걸음 에 빨리 적응 하도록 도와 줍 니 다.
    Lambda 표현 식
    Lambda 표현 식 은 자바 8 이 도입 한 중량급 문법 사탕 입 니 다.만약 에 친구 들 이 이전에 다른 프로 그래 밍 언어(Groovy,Scala,js 등)를 접 한 적 이 있다 면 Lambda 표현 식 에 익숙 할 것 입 니 다.자바 의 람 다 는 뒤 늦게 왔 다.다음은 자바 8 에 새로 가입 한List.forEach()만 예 를 들 어 설명 한다.
  • 먼저 Lambda 가 없 을 때List.forEach()의 용법 을 살 펴 보 자.
  •         List<String> list= Arrays.asList("a","b","c");
            list.forEach(new Consumer<String>() {
                @Override
                public void accept(String s) {
                    System.out.println(s);
                }
            });
    

    위의 문 구 는 매우 수 다스 러 운 것 을 알 수 있 습 니 다.우 리 는 list 의 값 을 출력 하고 싶 을 뿐 인 데 왜 익명 류 를 정의 하고 방법 을 써 야 합 니까?
  • 그래서 만 천 프로그램 원숭이 를 구 하 는 Lambda 가 왔 다.위의 약 자 는 다음 과 같다.
  • 		List<String> list= Arrays.asList("a","b","c");
    		list.forEach((Object a)->{
                System.out.println(a);
            });
    

    위 에 것 보다 훨씬 간소화 한 거 아니 야?그러나 이것 도 부족 하 다.위 에서list의 범 형 에 대해 정 의 를 내 렸 는데 왜 우리 가 성명 을 해 야 합 니까?Object
  • 자바 8 은 우리 에 게 더 좋 은 유형 을 가 져 다 주 었 기 때문에 이 어 간략화 할 수 있다.
  •         List<String> list= Arrays.asList("a","b","c");
            list.forEach(a->{
                System.out.println(a);
            });
    

    기왕 이렇게 된 이상 아직 부족 하 다.대괄호 귀 차 당 의견 이 있 습 니 다.그래서
  • 최종 판:
  •         List<String> list= Arrays.asList("a","b","c");
            list.forEach(a->System.out.println(a));
    

    주의:대괄호 가 생략 될 때;번호 도 동시에 생략 해 야 합 니 다.
    1 판 에 람 다가 없 을 때의 상황 을 비교 해 보면 많이 간소화 되 지 않 았 나 요?
    lambda 표현 식 특징:1
  • 선택 가능 한 유형 성명:매개 변수 유형 을 설명 할 필요 가 없고 컴 파일 러 는 매개 변수 값 을 통일 적 으로 식별 할 수 있 습 니 다.
  • 선택 할 수 있 는 매개 변수 괄호:하나의 매개 변 수 는 괄호 를 정의 할 필요 가 없 지만 여러 매개 변 수 는 괄호 를 정의 해 야 합 니 다.
  • 선택 할 수 있 는 대괄호:주체 가 하나의 문 구 를 포함 하면 대괄호 를 사용 할 필요 가 없습니다.
  • 선택 할 수 있 는 반환 키워드:주체 가 표현 식 반환 값 만 있 으 면 컴 파일 러 는 자동 으로 값 을 되 돌려 줍 니 다.대괄호 는 명시 적 표현 식 을 지정 하여 수 치 를 되 돌려 줍 니 다.

  • Lambda 쓰기
  • 단일 매개 변수 단일 문 구 는 반환 값 이 없다a -> System.out.println(a)
  • 다 중 매개 변수 단일 문 구 는 반환 값 이 없다(a,b) -> System.out.println(a+":"+b)
  • 다 중 매개 변수 다 중 구문 반환 값 없 음
  • (a,b) -> {
    	if(a==b){
    		System.out.println(a+":"+b);
    	}
    }
    

    4.다 중 매개 변수 다 중 문 구 는 반환 값 이 있 습 니 다.
    (a,b) -> {
    	if(a==b){
    		return a;
    	}else{
    		return b;
    	}
    }
    

    5.단일 매개 변수 단일 문 구 는 반환 값a -> a이 있 습 니 다.
    함수 인터페이스 함수 인터페이스
    Function alInterface 함수 인터페이스(이하 중국어 이름 를 직접 부 를 것 입 니 다.엄 밀 히 말 하면 새로운 것 이 아 닙 니 다.새로운 정의 일 뿐 엄격 하지 않 은 정 의 는 다음 과 같 습 니 다.
    실현 되 지 않 은 방법 이 하나 밖 에 없 는 모든 인 터 페 이 스 를 통칭 한다 .
    아까 의List.forEach()예 를 들 어 그 매개 변 수 는java.util.function.Consumer이다.
    package java.util.function;
    
    import java.util.Objects;
    
    @FunctionalInterface
    public interface Consumer<T> {
    
        /**
         * Performs this operation on the given argument.
         *
         * @param t the input argument
         */
        void accept(T t);
        // default  static            
        default Consumer<T> andThen(Consumer<? super T> after) {
            Objects.requireNonNull(after);
            return (T t) -> { accept(t); after.accept(t); };
        }
    }
    

    그 중에서 실현 되 지 않 은 방법 은accept(T t)하나 밖 에 없 기 때문에java.util.function.Consumer류 는 함수 인터페이스 이 고 실제 Lambda 표현 식 은 사실상 암시 적 으로 이 인 터 페 이 스 를 실현 하고 그 중에서 실현 되 지 않 은 방법accept(T t)을 다시 썼 다.방법 내 부 를 살 펴 보 겠 습 니 다.
        default void forEach(Consumer<? super T> action) {
            Objects.requireNonNull(action);
            for (T t : this) {
                action.accept(t);
            }
        }
    

    사실은 반복 적 으로 list 의 요 소 를List.forEach()방법의 매개 변수 로 입력 하여 실행 하 는 것 입 니 다.모든 것 이 간단 합 니 다.Lambda 표현 식 은 컴 파일 러 에 불과 합 니 다.개발 을 간단하게 하기 위해 작은 무늬 를 만 들 었 을 뿐 입 니 다.
    @FunctionalInterface 주석
    @FunctionalInterface 주 해 는 실제 의미 가 인터페이스 가 함수 인터페이스 에 속 하 는 지 에 영향 을 주지 않 습 니 다.그 주요 역할 은 개발 자 에 게 알려 주 고 컴 파일 러 에 게@FunctionalInterface 에 표 시 된 인터페이스 가 실현 되 지 않 은 방법 만 있 는 지 확인 하 는 것 입 니 다.
    자바 8 에 추 가 된 함수 인터페이스
    자바 8 에 추 가 된 함수 인 터 페 이 스 는accept(T t)패키지 에 있 습 니 다.
    인터페이스
    매개 변수
    반환 값
    BiConsumer
    T U
    void
    BiFunction
    T U
    R
    BinaryOperator< T >
    T T
    T
    BiPredicate
    T U
    boolean
    BooleanSupplier
    boolean
    Consumer< T >
    T
    void
    DoubleBinaryOperator
    double double
    double
    DoubleConsumer
    double
    viod
    DoubleFunction< R >
    double
    R
    DoublePredicate
    double
    boolean
    DoubleSupplier
    double
    DoubleToIntFunction
    double
    int
    DoubleToLongFunctio
    double
    long
    DoubleUnaryOperator
    double
    double
    Function
    T
    R
    IntBinaryOperator
    int
    int
    IntConsumer
    int
    viod
    IntFunction< R >
    int
    R
    IntPredicate
    int
    boolean
    IntSupplier
    int
    IntToDoubleFunction
    int
    double
    IntToLongFunction
    int
    long
    IntUnaryOperator
    int
    int
    LongBinaryOperator
    long long
    long
    LongConsumer
    long
    viod
    LongFunction< R >
    long
    R
    LongPredicate
    long
    boolean
    LongSupplier
    long
    LongToDoubleFunction
    long
    boolean
    LongToIntFunction
    long
    int
    LongUnaryOperator
    long
    long
    ObjDoubleConsumer< T >
    T double
    void
    ObjIntConsumer< T >
    T
    int
    ObjLongConsumer< T >
    T
    long
    Predicate< T >
    T
    boolean
    Supplier< T >
    T
    ToDoubleBiFunction
    T U
    double
    ToDoubleFunction< T >
    T
    double
    ToIntBiFunction
    T U
    int
    ToIntFunction< T >
    T
    int
    ToLongBiFunction
    T U
    long
    ToLongFunction< T >
    T
    long
    UnaryOperator< T >
    T
    T
    https://blog.csdn.net/yitian_66/article/details/81010434 ↩︎

    좋은 웹페이지 즐겨찾기