자바 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 판단 을 어느 정도 대체 하여 관련 인 터 페 이 스 를 소개 할 수 있 습 니 다.
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 표현 식 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 8 새 기능 내장 함수식 인터페이스 상세 정보Java 8 새로운 기능 내장 함수식 인터페이스 이전의 블로그 람다 표현식에서 자바 8이 제공하는 함수식 인터페이스를 언급한 적이 있다.이 글에서 자바 8의 가장 기본적인 함수식 인터페이스를 소개할 것이다 방법의 인...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.