optional 처리 null 을 어떻게 사용 하 는 지 가르쳐 드릴 게 요.
자바 개발 에 비해 만 나 는 것
NullPointerException
이 낯 설 지 않 을 것 이다.개발 할 때NullPointerException
이상 이 없 을 것 이 라 고 생각 하고 결국 생산 환경 에 이 르 러 의외 의 놀 라 움 을 줄 것 이다.그러나 개발 할 때 처리 대상 이 비어 있 는 것 은 보통if(null != xxx)
을 사용 하거나 일부 도구 류 를 사용한다.예 를 들 어if(ObjectUtils.isEmpty(xxx))
이런 처 리 는 우리 의 코드 를 비대 하 게 만 들 고 한 대상 을 만 났 을 때 이렇게 해 야 한 다 는 것 을 알 수 있다.Optional
종 류 를 사용 하면 프로그램 에서 한 무더기 의if
를 사용 하여 빈 것 을 처리 하 는 것 을 피 할 수 있다.다음 표Optional
클래스 의 방법 을 보 여 줍 니 다.방법
묘사 하 다.
empty
빈
Optional
인 스 턴 스 를 되 돌려 줍 니 다.of
지 정 된 값 을
Optional
봉 하여 되 돌려 주 고,값 이null
이면 이상 던 지기NullPointerException
ofNullable지정 값 을
Optional
봉 하여 되 돌려 주 고,값 이null
이면 빈Optional
대상 으로 되 돌려 줍 니 다.get
값 이 존재 하면 이 값 을 되 돌려 줍 니 다.그렇지 않 으 면
NullPointerException
이상 을 던 집 니 다.isPresent
검사 값 이 존재 하 는 지,반환 이 존재 하 는 지
true
,그렇지 않 으 면 반환false
ifPresent값 이 존재 하면 이 값 을 사용 하 는 방법 으로 호출 합 니 다.그렇지 않 으 면 아무것도 하지 않 습 니 다.
filter
값 이 존재 하고 제 공 된 서술 어 를 만족 시 키 면 이 값 을 포함 하 는
Optional
대상 을 되 돌려 줍 니 다.그렇지 않 으 면 빈Optional
대상 을 되 돌려 줍 니 다.map
값 이 존재 하면 이 값 에 제공 하 는
mapping
함수 호출flatMap
값 이 존재 하면 이 값 에 제 공 된
mapping
함수 호출 을 실행 하고Optional
형식의 값 을 되 돌려 줍 니 다.그렇지 않 으 면 빈Optional
대상 을 되 돌려 줍 니 다.orElse
값 이 존재 하면 되 돌려 줍 니 다.그렇지 않 으 면 지정 한 값 을 되 돌려 줍 니 다.
orElseGet
값 이 존재 하면 되 돌려 줍 니 다.그렇지 않 으 면 지정 한
Supplier
인터페이스 에서 생 성 된 값 을 되 돌려 줍 니 다.orElseThrow
값 이 존재 하면 되 돌려 줍 니 다.그렇지 않 으 면 지정 한
Supplier
인터페이스 에서 생 성 된 이상 을 던 집 니 다.다음은 위 에 열거 한 방법 을 상세 하 게 사용 하 겠 습 니 다.
2.Optional 클래스 사용
2.1 empty
Optional<User> user = Optional.empty();
빈 대상 만 들 기Optional
2.2 of
User user = null;
Optional<User> optional = Optional.of(user);
user
이 비어 있 고 직접 보고NullPointerException
가 이상 하기 때문에 이 방법 은 일반적으로 매우 적다.2.3 ofNullable
User user = null;
Optional<User> optional = Optional.ofNullable(user);
user
비어 있 으 면 빈Optional
대상 으로 돌아간다.2.4 get
User user = null;
Optional<User> optional = Optional.ofNullable(user);
optional.get();
Optional
에서 값 을 얻 고 값 이 존재 하지 않 으 면 다음 과 같은 이상 을 던 집 니 다.java.util.NoSuchElementException: No value present
2.5 isPresent
User user = null;
Optional<User> optional = Optional.ofNullable(user);
optional.isPresent();
상기 예 반환false
,user
이 비어 있 지 않 으 면 반환true
2.6 ifPresent
User user = null;
Optional<User> optional = Optional.ofNullable(user);
optional.ifPresent(us->{
//user ,
});
2.7 filter
User user = new User();
user.setName(" A");
boolean result = Optional.ofNullable(user).filter(us -> " A".equals(us.getName())).isPresent();
사용자 이름 A
이면 되 돌아 오기true
,그렇지 않 으 면 되 돌아 오기false
2.8 map
User user = new User();
user.setName(" A");
String name = Optional.ofNullable(user).map(User::getName).get();
user
이 비어 있 지 않 으 면name
속성 을 추출 하여get()
사용 하여 얻 을 수 있 습 니 다.여기name
가 비어 있 으 면 이상 을 보고 하기 때문에 기본 값 을 지정 하거나 사용자 정의 이상 을 사용 합 니 다.
String name = Optional.ofNullable(user).map(User::getName).orElse("");
혹시
String name = Optional.ofNullable(user)
.map(User::getName)
.orElseThrow(()->new RuntimeException(" "));
2.9 flatMap이 방법 은 보통 클래스 에서 다른 클래스 의 특정한 속성 을 얻 는 데 사 용 됩 니 다.예 를 들 어 한 반 에 학생 이 있 고 학생 안에 주소 가 있 습 니 다.지금 은 이 반 의 한 학생 의 주 소 를 가 져 와 야 합 니 다.예전 의 쓰기 방법 에 따라:
Address address = new Address();
address.setAddr(" ");
Student student = new Student();
student.setName(" A");
student.setAddress(address);
Grade grade = new Grade();
grade.setName(" 2 ");
grade.setStudent(student);
if(!ObjectUtils.isEmpty(grade)){
Student student1 = grade.getStudent();
if(!ObjectUtils.isEmpty(student1)){
Address address1 = student1.getAddress();
if(!ObjectUtils.isEmpty(address1)){
System.out.println(address1.getAddr());
}
}
}
절차 에 문제 가 없 도록 많은if
을 써 서 판단 한다.다음은flatMap
으로 어떻게 실현 되 는 지 살 펴 보 자.
Optional.ofNullable(grade)
.flatMap(g->Optional.ofNullable(g.getStudent()))
.flatMap(s->Optional.ofNullable(s.getAddress()))
.map(Address::getAddr)
.orElse("")
혹시
Optional.ofNullable(grade)
.map(Grade::getStudent)
.map(Student::getAddress)
.map(Address::getAddr)
.orElse("")
2.10 orElse
Optional.ofNullable(grade).orElse(new Grade());
2.11 orElseGet
Optional.ofNullable(grade).orElseGet(()->new Grade());
2.12 orElseThrow
Optional.ofNullable(grade).orElseThrow(()->new RuntimeException(" "));
이상Optional
류 의 모든 방법의 사용 이 열거 되 었 다.여기 서 optional 처리 null 을 어떻게 사용 하 는 지 가르쳐 주 는 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 optional 처리 null 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 함수 식 프로 그래 밍(8)optional이 방법 은 마치 방금 지나 간 쓰레기차 처럼 냄새 가 고약 하 다.우 리 는 먼저 foundName 의 변 수 를 새로 만 든 다음 null 로 초기 화 합 니 다.이것 이 바로 악취 의 근원 입 니 다.비어 있 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.