jdk1.8 새로운 기능 - Lambda 표현식 및 함수 인터페이스

책은 쓸 때 적은 것을 원망한다. 며칠 전에 회사를 연결하는 한 프로젝트에서 이 프로젝트는 jdk8의 새로운 특성을 많이 사용했고 코드가 매우 간결하지만 jdk8의 새로운 특성에 대한 이해가 적어서 많은 코드 논리를 이해하지 못했기 때문에 몇 시간 동안 jdk8의 비교적 중요한 몇 가지 새로운 특성을 배우고 여기서 정리했다!

Lambda 표현식


자바 집합에서forEach 방법으로 집합을 옮겨다니면 jdk1이 사용됩니다.8의 새로운 기능: Lambda 표현식과 함수 인터페이스
먼저 forEach 방법의 원본 코드를 보십시오:
default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
        action.accept(t);
    }
}

방법 원본에서 알 수 있듯이forEach 방법은 Iterable 인터페이스(java.lang)의 기본적인 방법이다. 이 방법은 함수식 인터페이스인 Consumer를 매개 변수로 수신한다. Consumer 인터페이스는 4대 함수식 인터페이스 중 하나로 소비형 인터페이스에 속한다. 이 인터페이스의 유일한 추상적인 방법void accept(T t); 방법은 매개 변수를 수신하지만 되돌아오는 값이 없다. 즉, 이 매개 변수를 소비하는 것으로 간단하게 이해할 수 있다.이 방법은 하나의 매개 변수를 수신한 후 출력 문구로 이 매개 변수의 값을 출력하는 데 많이 쓰인다.이 방법의 처리 논리는 집합 중의 모든 요소를Consumer 인터페이스의accept 방법으로 처리하는 논리입니다.
//1.        
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
Consumer<Integer> consumer=new Consumer<Integer>() {
    @Override
    public void accept(Integer integer) {
        System.out.println(integer);
    }
};
list.forEach(consumer);
2.        
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.forEach(new Consumer<Integer>() {
    @Override
    public void accept(Integer integer) {
        System.out.println(integer);
    }
});
3.jdk1.8 Lambda      
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.forEach((Integer v)-> {System.out.println(v);});

Lambda 표현식에 대해서는 쓰기를 더욱 간소화할 수 있다. 만약에 방법체가 한 줄의 문장만 있다면 문장 뒤의 분호와 방법체의 대괄호를 생략할 수 있다. 만약에 이 문장이 리턴으로 되돌아온다면 리턴을 직접 생략할 수도 있다.주의해야 할 것은 일반적으로 생략하려면 함께 생략하고, 즉 분호, 대괄호,return 세 가지를 함께 생략하는 것이다.매개 변수의 경우 매개 변수의 유형을 생략할 수 있고, 매개 변수가 하나일 경우 매개 변수의 괄호를 생략할 수도 있다.
위의 Lambda 표현식에 대한 간단한 쓰기 방법은 다음과 같습니다.
list.forEach(v-> System.out.println(v));

4대 함수식 인터페이스


함수식 인터페이스는 인터페이스에 하나의 추상적인 방법만 포함하고 기본 방법과 정적 방법의 수량에 제한이 없는 인터페이스를 말한다.jdk1.8 이후 @FunctionalInterface 주석을 추가하여 함수식 인터페이스를 표시한다.모든 함수식 인터페이스는java에 있습니다.util.function 싸주세요.
  • Function: 기능형 함수식 인터페이스, R apply(T t); 이 방법은 매개 변수를 수신하고 값을 되돌려준다.예:
  • Function<Integer, Integer> func = p -> p * 10;    //      10 
    
  • Consumer: 소비형 함수식 인터페이스, void accept(T t); 이 방법은 매개 변수를 수신하고 아무런 반환도 하지 않습니다
  • Consumer<String> consumer= p -> System.out.println(p);    //       ,     、         
    
  • Predicate: 단언형 함수식 인터페이스, boolean test(T t); 이 추상적인 방법은 매개 변수를 수신하고 브리치
  • 를 되돌려줍니다.
    Predicate<Integer> predicate = p -> p % 2 == 0;    //        
    
  • Supplier: 공급형 함수식 인터페이스, T get(); 이 방법은 매개 변수를 받지 않지만 값을 되돌려줍니다
  • Supplier<Integer> supplier= () -> 100; 
    

    jdk1.8의 기타 새로운 기능:
  • jdk1.8 새로운 기능 - Optional 클래스:https://blog.csdn.net/can_chen/article/details/106886579
  • jdk1.8 새로운 기능 - 스트림 프로그래밍:https://blog.csdn.net/can_chen/article/details/106886484
  • jdk1.8 새로운 기능 - 메소드 참조:https://blog.csdn.net/can_chen/article/details/106886536
  • 좋은 웹페이지 즐겨찾기