자바 8 의 lambda 표현 식 을 자세히 설명 합 니 다.:기호 와 Optional 클래스

자바 8 의 lambda 표현 식,:기호 와 Optional 클래스
 0.함수 식 프로 그래 밍
    함수 식 프로 그래 밍(Functional Programming)은 프로 그래 밍 패 러 다 임(Programming Paradigm)의 용어 에 속 하 며,명령 식 프로 그래 밍(Imperative Programing)등 도 있 습 니 다.관심 있 는 학생 들 은 스스로 이해 할 수 있 습 니 다.함수 식 프로 그래 밍 을 대충 설명 하 겠 습 니 다.함수 식 프로 그래 밍 에서 입력 이 확정 되면 출력 이 확정 되 었 습 니 다.함수 호출 결 과 는 들 어 오 는 입력 변수 와 내부 논리 에 만 의존 하고 외부 에 의존 하지 않 습 니 다.이러한 작성 함 수 는 부작용 이 없습니다.예 를 들 어:

public class Person{

 private int a = 1;

 public int add(int b){
  return a + b;
 }

 public int pow(int c){
  return c * c;
 }

 public static void main(String[] args){
  Person p = new Person();
  p.add(1);
  p.pow(2);
 }
}
    위의 코드 에서 add(int b)라 는 방법 은 함수 식 프로 그래 밍 에 부합 되 지 않 습 니 다.이 함수 호출 후의 결 과 는 확실 하지 않 습 니 다.그 결 과 는 b 뿐만 아니 라 필드 a 에 도 달 려 있 습 니 다.한편,pow(int c)이 함 수 는 함수 식 프로 그래 밍 에 부합 되 는 본보기 입 니 다.이 함 수 를 호출 하면 입력 한 값 c 가 반환 값 을 확정 하면 반드시 확 정 됩 니 다.
    함수 식 프로 그래 밍 에서 함수 도 1 등 시민 입 니 다.매개 변수 로 전달 되 고 할당 되 며 인용 되 며 데이터 형식 으로 취급 할 수 있 습 니 다.자바 script 과 같은 언어 를 사용 할 수 있다 면 더욱 깊이 느 낄 수 있 습 니 다.이런 프로 그래 밍 패 러 다 임 을 깊이 이해 하려 면 인터넷 검색 자 료 를 통 해 알 수 있다.
1.lambda 표현 식
    lambda 표현 식 은 jdk 8 의 새로운 특성 입 니 다.위 에서 말 한 함수 식 프로 그래 밍 은 바로 이것 을 도입 하 는 것 입 니 다.Oacle 은 jdk 8 에 lambda 를 도입 하여 자바 에서 함수 식 프로 그래 밍 부분 을 지원 하기 시 작 했 습 니 다.
    자바 에서 lambda 표현 식 의 문법 구조:(params)->expression.세 부분 으로 구성 되 어 있 으 며,첫 번 째 부분 은 괄호 와 괄호 내부 의 형식 매개 변수 이 고,두 번 째 부분 은'->'화살표 기호 이 며,세 번 째 부분 은 expression 방법 체 이 며,방법 체 는 코드 블록 일 수도 있 고 실행 식 일 수도 있다.

//1. lambda        :     ,    ,    。
(int a, int b) -> {
 int c = a + b;
 return c;
}
//2. lambda                
 //2.1                   return  
  (int a, int b) -> {
  int c = a + b;
 }
 //2.2                   
  //                    
 (int a, int b) -> a + b; //  1       
 //2.3                           
  //        
 (a, b) -> a + b; //  1,2.2       
 //2.4               ,      
 a -> a * a;
    다음은 정의 인터페이스 에서 lambda 표현 식 을 사용 하 는 코드 를 보 여 줍 니 다.

/**
 * description:
 *
 * @author waxxd
 * @version 1.0
 * @date 2019-10-15
 **/
public class Test1 {

 private int a = 1;
 private int b = 2;
 /**
  *         IAdd     
  * @param add
  * @return
  **/
 public int add1(IAdd add){
  return add.add(a,b);
 }
 public static void main(String[] args) {
  Test1 test1 = new Test1();
  //   lambda   
  int c = test1.add1((a, b) -> a + b);
  System.out.println(c);
  //      
  int d = test1.add1(new IAdd(){
   @Override
   public int add(int a, int b){
    return a + b;
   }
  });
  System.out.println(d);
 }
}

/**
 * description:
 *        ,           
 * @author waxxd
 * @version 1.0
 * @date 2019-10-15
 **/
@FunctionalInterface
public interface IAdd {
 int add(int a, int b);
}
    lambda 표현 식 을 사용 하 는 방식 이 익명 코드 에 비해 훨씬 간소화 되 고 우아 한 것 을 볼 수 있 습 니 다.다음은 자주 사용 하 는 예 를 들 어 스 레 드 를 만 듭 니 다.

public class Test(){
 public static void main(String[] args) {
  Thread t1 = new Thread(new Runable(){
   System.out.println("            ");
  });

  Thread t2 = new Thread( () -> System.out.println("  lambda      "));

  t1.start();
  t2.start();
 
 } 
}
2.짝 퉁::기호
    이 기 호 는 c++에서 처음 보 았 습 니 다.c++에서 표지 역할 영역 에서 기호 나 범 위 를 분석 하 는 기호 입 니 다.설명 이 정확 하지 않 을 수 있 습 니 다.c++에 관심 이 있 는 학생 들 은 스스로 찾 을 수 있 습 니 다.c++를 알 면 이 조작 기 호 는 c+에서 함수 포인터 와 비슷 합 니 다.:자바 에서 도 방법 인용 이 라 고 할 수 있 습 니 다.위 에서 말 한 함수 도 1 등 시민 입 니 다.여 기 는 방법 을 매개 변수 로 전달 하 는 것 과 유사 합 니 다.앞의 예 에서 우 리 는 lambda 표현 식 을 사용 할 때 익명 류 를 사용 하여 인 터 페 이 스 를 실현 하 는 방법 과 유사 하지만 우 리 는 스스로 인 터 페 이 스 를 실현 하 는 방법 을 원 하지 않 는 다.단지 이미 실 현 된 방법 을 전달 하고 싶 을 뿐 사용 할 수 있다.'그의 언어 와 법 규 는 다음 과 같다.
                  클래스 이름:정적 방법 이름 이나 클래스 의 인 스 턴 스:인 스 턴 스 방법.

List<File> list = new ArrayList<>;
list.forEach(File::getName); //              ,
list.forEach( file -> file.getName()); //      lambda   
3.선택 클래스
    optional 도 jdk 8 의 새로운 클래스 입 니 다.자바 언어 에서 NPE 이상 을 처리 하 는 더욱 우아 한 방식 을 제공 합 니 다.if 판단 을 어느 정도 대체 하여 관련 인 터 페 이 스 를 소개 할 수 있 습 니 다.
  • empty 빈 optional 대상 만 들 기
  • of 와 of Nullable
    of 는 optional 대상 을 만 들 고 들 어 오 는 인자 가 비어 있 으 면 NPE 이상 이 발생 합 니 다.
    of Nullable 은 위 와 같 지만 매개 변수 가 비어 있 을 때 empty 방법 으로 빈 optional 대상 을 만 듭 니 다.
    
    Optional<String> of = Optional.of("waxxd");
    //         NullPointerException  
    Optional<String> ofNull = Optional.of(null); 
    //          
    Optional<String> ofNullable = Optional.ofNullable("waxxd");
    //            Optional.empty()
    Optional<String> ofNullableNull = Optional.ofNullable(null); 
    get/orElse/orElseGet/orElseThrow
    
    // get   Option        null   NoSuchElementException  
    String aa = Optional.of("aa").get();
    // orElse            orElse      
    String aa1 = Optional.of("aa").orElse("bb");
    // orElseGet                   Supplier                
    String aa2 = Optional.of("aa").orElseGet( () -> "aaa".toUpperCase());
    // orElseThrow                
    Optional.empty().orElseThrow(IllegalArgumentException::new);
    
    //      ,             if
    //        ,       Integer type,          ,            1
    public void f(Integer type){
    	if(type = null) {
    		type = 1;
    	}
    	
    	Optional.ofNullable(type).orElse(1);
    }
    자바 8 의 lambda 표현 식 에 관 한 이 글 은 다음 과 같 습 니 다.기호 와 optional 류 의 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 8 lambda 표현 식 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기