-
Optional API 사용JAVA/JAVA8 관련 2022. 4. 17. 16:38
Optional API를 주로 어떻게 사용하는지 살펴보았다.
1. NULL 체크
List<OnlineClass> springClasses = new ArrayList<>(); springClasses.add(new OnlineClass(1, "spring boot", true)); springClasses.add(new OnlineClass(5, "rest api development", false)); Optional<OnlineClass> spring = springClasses.stream() .filter(oc-> oc.getTitle().startsWith("spring")) .findFirst(); // 1. spring이 값이 있는지 체크 true이면 값이 있음. (null 체크) boolean present = spring.isPresent(); System.out.println(present); // 아래와 같이 사용할 수도 있다. spring.ifPresent(a-> System.out.println(a.getTitle()));
위의 결과는 spring으로 시작하는 타이틀 값이 있기 때문에 true이다.
2. orElse 관련 메서드
// orElseGet: 있을 때는 가져오고 없을때는 새로운 class를 만든다. // spring의 startsWith에 있는 단어를 없는 단어로 변경 후 실행 하면, 새로운 class 생성하는 것을 볼수 있다. // orElse : 있을 때도 가져오지만, 새로운 class도 만든다. OnlineClass onlineClass1 = spring.orElseGet(App::createNewClasss); System.out.println(onlineClass1.getTitle()); OnlineClass onlineClass2 = spring.orElse(createNewClasss()); System.out.println(onlineClass2.getTitle()); private static OnlineClass createNewClasss() { System.out.println("creating new online class"); return new OnlineClass(10, "New class", false); }
onlineClass1은 spring boot
onlineClass2은 create new online class를 출력한다.
3. orElseThrow : 없는 경우 예외처리
// orElseThrow : 없는 경우에 예외 처리 (에러발생) Optional<OnlineClass> spring = springClasses.stream() .filter(oc-> oc.getTitle().startsWith("jpa")) .findFirst(); // orElseThrow : 없는 경우에 예외 처리 (에러발생) OnlineClass onlineClass3 = spring.orElseThrow(IllegalStateException::new); System.out.println(onlineClass3.getTitle()); OnlineClass onlineClass4 = spring.orElseThrow(()->{ return new IllegalStateException(); }); // jpa로 시작하는 데이터가 없기 때문에 Exception 발생
예제
Optional<OnlineClass> onlineClass = spring.filter(oc->oc.isClosed()); System.out.println(onlineClass.isEmpty()); // false // spring으로 시작하는 값은 위의 1번이다. // 1번의 closed값은 true이기 때문에 isEmpty 값은 false가 나온다.
'JAVA > JAVA8 관련' 카테고리의 다른 글
Date와 Time (0) 2022.05.15 Date 와 Time 소개 (0) 2022.05.15 [더 자바8] Opitonal 소개 (0) 2022.04.05 [더 자바8] STREAM API (0) 2022.03.20 [더 자바8] 인터페이스 기본 메소드와 스태틱 메소드 (0) 2022.02.13