Java8 Lambda 표현식 상세 정보 및 인스턴스

3053 단어 Java8Lambda
첫 번째 Lambda 표현식
Lambda가 나타나기 전에 다중 스레드를 작성하려면 다음과 같은 방법이 필요할 수 있습니다.

Runnable runnable = new Runnable() {
      @Override
      public void run() {
        System.out.println("Hello runnable");
      }
    };
    ...
 thread.start();
위의 예는 Lambda를 사용하는 것으로 바꾸면 훨씬 간단해진다.

Runnable noArgs = ()->System.out.println("Hello Lambda!~");
...
 thread.start();
Lambda 표현식은 익명 함수로 행위를 데이터처럼 전달하고, 표현식은 ->를 사용하여 매개 변수와 주체를 분리하고, ->앞은 매개 변수 부분, 뒤는 주체 부분이다.
Lambda의 다른 형식

BinaryOperator<Long> add = (x,y)->x+y;
 //OR
 BinaryOperator<Long> add = (Long x,Long y)->x+y;
 //OR
 BinaryOperator<Long> add = (Long x,Long y)->{
  x+y;
 };
  • Lambda 표현식 사용()은 매개변수가 없음을 나타냅니다
  • Lambda 표현식에 매개변수가 하나만 포함된 경우 () 생략할 수 있습니다
  • 만약에 Lambda 표현식의 주제가 코드 블록이라면 {}를 사용해야 합니다. 이 코드 블록은 일반적인 자바 코드 블록과 차이가 없고 되돌아오거나 이상을 던질 수 있습니다
  • 만약에 매개 변수의 유형이 컴파일러에 의해 추정될 수 있다면 매개 변수의 유형을 생략할 수 있습니다. 물론 당신도 덧붙일 수 있습니다
  • 이상은 Lambda 표현식의 모든 형식입니다.
    그럼 질문이 왔습니다.
    BinaryOperator add = (Long x,Long y)->x+y; 무슨 뜻이에요?
    이 줄 코드는 숫자를 덧붙이는 것이 아니라 두 숫자가 덧붙인 결과를 계산하는 함수를 만들었다.add의 유형은 BinaryOperator입니다. 두 숫자의 합이 아니라 두 숫자를 더한 코드입니다.다음 예제에서는 이 변수를 사용하는 방법을 보여 줍니다.
    
    BinaryOperator<Long> add = (Long x,Long y)->x+y;
     Long res = add.apply(3L, 4L);
     System.out.println("res="+res);// :res=7
    
    함수 인터페이스
    함수 인터페이스는 Lambda 표현식의 유형으로 사용되는 추상적인 방법만 있는 인터페이스입니다.
    Runnable과 같은 함수 인터페이스입니다.
    함수 인터페이스를 새로 만듭니다.
    
    public interface AddOperator<T,D> {
      long add(T one,D two);
    }
    
    사용:
    
    AddOperator<Long,Long> addOperator = ( x, y)->x +y;
     System.err.println("Custom function listener res= "+addOperator.add(34L, 65L));
    
    대상 유형
    대상 유형은 Lambda 표현식이 있는 컨텍스트 환경의 유형입니다.예를 들어 Lambda 표현식을 국부 변수에 부여하거나 하나의 방법에 매개 변수로 전달하면 국부 변수나 방법 매개 변수의 유형이 바로 Lambda 표현식의 목표 유형이다.
    final
    만약 우리가 익명 내부 클래스에서 그 방법의 국부 변수를 인용했다면, 이것은 국부 변수가final이어야 하는 것이다.
    Lambda에서 인용된 외부 국부 변수를final로 표시할 필요는 없지만, 이 변수는 한 번만 값을 부여할 수 있습니다.
    다음 예에서 주석을 삭제하고name에 다시 값을 부여하면 컴파일링을 통해 오류 정보를 표시할 수 없습니다:local variables referenced from a Lambda expression must be final or effectively final.
    Lambda 표현식이 인용하는 국부 변수는final 또는 사실이 된final이어야 합니다.
    
    String name = getUserName();
    //name="hi";
    button.addActionListener(event->System.out.println("name="+name));
    
    유형 추정
    Lambda 표현식의 유형 추정은 Java7에 도입된 목표 유형 추정의 확장입니다.
    java7의 유형 추정:
    List list= new ArrayList<>();
    상례에서 우리는 Array List의 범주 유형을 지정하지 않고 list의 유형에 따라 Array List의 범주 유형을 추정했다.
    예: AddOperatoraddOperator=(x, y)->x+y;
    이 글을 통해 여러분에게 도움이 되고 이해를 배울 수 있기를 바랍니다. 이 부분의 지식은 여러분의 본 사이트에 대한 지지에 감사드립니다!

    좋은 웹페이지 즐겨찾기