자바 8 선택 적 판정 상세 해석(판정 조작 간소화)

안내
Optional 로 빈 칸 을 판정 하지 않 기 전에 당신 도 아래 코드 처럼 빈 칸 을 판정 합 니까?그렇다면 아래 를 내 려 다 보 세 요.옵션 은 전통 적 인 허공 판정 에 비해 우세 합 니 다.

전통 계층 의 판결 이 공허 하 다.
왜 Optional 을 사용 합 니까?그것 은 도대체 무엇 입 니까?
너 도 위의 그 그림 을 보 았 다.코드 의 양 이 많아 지면 조건 이 많아 지면 코드 는 매우 지루 해 지고 유지 하기 어려워 진다.그렇다면 이 럴 때 우 리 는 옵션 을 알 필요 가 있다.
optional 클래스 는 null 을 위 한 용기 대상 입 니 다.값 이 존재 하면 isPresent()방법 은 true 를 되 돌려 주 고 get()방법 을 호출 하면 대상 을 되 돌려 줍 니 다.optional 은 용기 입 니 다.T 형식의 값 을 저장 하거나 null 만 저장 할 수 있 습 니 다.optional 은 빈 값 검 사 를 하지 않 아 도 되 는 유용 한 방법 을 많이 제공 합 니 다.optional 류 의 도입 은 빈 포인터 이상 을 잘 해결 합 니 다.
2.선택 적 사용
optional 방법 은 다음 과 같다.

옵션 방법-그림 1

옵션 방법-그림 2
방법 이 이렇게 많 으 니 다른 것 도 말 할 필요 가 없습니다.동료 들 이 한눈 에 알 수 있 을 거 라 고 믿 습 니 다.어떻게 사용 하 는 지,코드 로 보 여 주 는 지,아래로 이동 하 세 요.
3.옵션 인 스 턴 스
1.of
null 이 아 닌 값 을 위 한 optional 을 만 듭 니 다.of 방법 은 공장 방법 을 통 해 optional 류 를 만 듭 니 다.주의해 야 할 것 은 대상 을 만 들 때 들 어 오 는 매개 변 수 는 null 일 수 없습니다.입력 인자 가 null 이면 NullPointer Exception 을 던 집 니 다.

Optional<String> optional = Optional.of("xiaoming");
//  null,  NullPointerException
Optional<Object> o = Optional.of(null);
2.ofNullable
지정 한 값 을 위해 optional 을 만 들 고 지정 한 값 이 null 이면 빈 optional 을 되 돌려 줍 니 다.

Optional<Object> o1 = Optional.ofNullable(null);
3.isPresent
값 이 true 로 돌아 가 는 것 이 존재 합 니 다.그렇지 않 으 면 false 로 돌아 갑 니 다.

Optional<String> optiona2 = Optional.of("xiaoming");
System.out.println(optiona2.isPresent());
4.get
optional 값 이 있 으 면 되 돌려 줍 니 다.NoSuchElement Exception 을 던 지지 않 았 습 니 다.

Optional<Object> o1 = Optional.ofNullable(null);
System.out.println(o1.get());
5.ifPresent
optional 에 값 이 있 으 면 consumer 로 처리 합 니 다.그렇지 않 으 면 처리 하지 않 습 니 다.

Optional<Object> o1 = Optional.ofNullable(null);
 o1.ifPresent(s -> System.out.println(s));
6.orElse
값 이 있 으 면 되 돌려 줍 니 다.그렇지 않 으 면 지정 한 다른 값 을 되 돌려 줍 니 다.

Optional<Object> o1 = Optional.ofNullable(null);
System.out.println(o1.orElse("  orElse")); //   orElse
7.orElseGet
orElseGet 은 orElse 방법 과 유사 하 며 기본 값 을 얻 는 것 과 구별 합 니 다.orElse 방법 은 들 어 오 는 문자열 을 기본 값 으로 합 니 다.orElseGet 방법 은 Supplier 인터페이스의 실현 을 받 아들 여 기본 값 을 만 들 수 있 습 니 다.

Optional<Object> o1 = Optional.ofNullable(null);
System.out.println(o1.orElseGet(() -> "default value")); // default value
*주의:orElse 와 orElseGet 은 차이 가 많 지 않 은 것 같 지만 사실은 많이 다르다.아래 의 예 를 보시오

Shop shop = null;
System.out.println("test orElse");
Optional.ofNullable(shop).orElse(createNew());System.out.println("test orElseGet");
Optional.ofNullable(shop).orElseGet(()->createNew());
//createNew
private static Shop createNew() {  System.out.println("create new");
  return new Shop("  ", 50);
}//  :
test orElsecreate newtest orElseGetcreate new
Shop shop = new Shop("  ",100);
System.out.println("test orElse");
Optional.ofNullable(shop).orElse(createNew());System.out.println("test orElseGet");
Optional.ofNullable(shop).orElseGet(()->createNew());
//  
test orElsecreate newtest orElseGet
위의 두 가지 예 를 통 해 알 수 있 듯 이 optional 이 비어 있 을 때 orElse 와 orElseGet 은 차이 가 크 지 않 지만 optional 이 값 이 있 을 때 orElse 는 호출 방법 으로 대상 을 만 들 고 orElseGet 은 더 이상 호출 방법 을 사용 하지 않 습 니 다.우리 가 처리 하 는 업무 데이터 의 양 이 많 을 때 이 두 가지 성능 은 매우 큰 차이 가 있다.
8.orElseThrow
값 이 있 으 면 되 돌려 줍 니 다.그렇지 않 으 면 supplier 인터페이스 가 만 든 이상 을 던 집 니 다.

Optional<Object> o1 = Optional.ofNullable(null);
try {
  o1.orElseThrow(() -> new Exception("  !"));
} catch (Exception e) {
  System.out.println("info:" + e.getMessage());
}//  :info:  !
9.map
값 이 있 으 면 mapping 함 수 를 호출 하여 값 을 되 돌려 줍 니 다.반환 값 이 null 이 아니라면 mapping 반환 값 을 포함 하 는 optional 을 map 방법 으로 값 을 되 돌려 줍 니 다.그렇지 않 으 면 빈 optional 로 돌아 갑 니 다.

Optional<String> optional = Optional.of("xiaoming");
String s = optional.map(e -> e.toUpperCase()).orElse("shiyilingfeng");
System.out.println(s); //  : XIAOMING
10.flatMap
값 이 있 으 면 mapping 함 수 를 실행 하기 위해 optional 형식 으로 값 을 되 돌려 줍 니 다.그렇지 않 으 면 빈 optional 로 돌아 갑 니 다.map 와 달리 flatMap 의 반환 값 은 optional 이 어야 하 며,map 의 반환 값 은 임의의 형식 T 일 수 있 습 니 다.

Optional<String> optional = Optional.of("xiaoming");
Optional<String> s = optional.flatMap(e -> Optional.of(e.toUpperCase()));
System.out.println(s.get()); //  :XIAOMING
11.filter

List<String> strings = Arrays.asList("rmb", "doller", "ou");
for (String s : strings) {
  Optional<String> o = Optional.of(s).filter(s1 -> !s1.contains("o"));
  System.out.println(o.orElse("     o "));
}//  :
rmb
     o 
     o 
소결
Optional 은 자바 의 매우 유용 한 보충 입 니 다.코드 에 있 는 NullPointer Exceptions 를 줄 이 는 데 목적 을 둡 니 다.100%제거 할 수 는 없 지만 정성 들 여 설계 한 것 입 니 다.Optional 을 사용 하면 가 독성 이 강하 고 bug 가 적은 프로그램 을 만 드 는 데 도움 을 줄 수 있 습 니 다.
총결산
자바 8 optional 판정 공(판정 공 조작 간소화)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 8 optional 판정 공 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기