자바 프로그래밍에서 NullPointerException을 종종 보게되는 이유
메소드에서 작업 중 특별한 상황에서 값을 제대로 리턴할 수없는 경우 선택할 수 있는 방법
Optional
주의할것
Optional 만들기
Optional에 값이 있는지 없는지 확인하기
List<OnlineClass> springClasses = new ArrayList<>();
springClasses.add(new OnlineClass(1, "spring boot", true));
springClasses.add(new OnlineClass(5, "rest api development", false));
Optional<OnlineClass> onlineClass = springClasses.stream()
.filter(oc -> oc.getTitle().startsWith("spring"))
.findFirst();
boolean present = spring.isPresent();
System.out.println(present);
Optional에 있는 값 가져오기
Optional에 값이 있는 경우에 그 값을 가지고 ~~을 하라.
List<OnlineClass> springClasses = new ArrayList<>();
springClasses.add(new OnlineClass(1, "spring boot", true));
springClasses.add(new OnlineClass(5, "rest api development", false));
Optional<OnlineClass> optional = springClasses.stream()
.filter(oc -> oc.getTitle().startsWith("spring"))
.findFirst();
optional.ifPresent(oc -> System.out.println(oc.getId()));
Optional에 값이 있으면 가져오고 없는 경우에 ~~을 리턴하라.
public static void main(String[] args) {
List<OnlineClass> springClasses = new ArrayList<>();
springClasses.add(new OnlineClass(1, "spring boot", true));
springClasses.add(new OnlineClass(5, "rest api development", false));
Optional<OnlineClass> optional = springClasses.stream()
.filter(oc -> oc.getTitle().startsWith("spring"))
.findFirst();
OnlineClass onlineClass = optional.orElse(creatNewClass());
}
private static OnlineClass creatNewClass() {
System.out.println("creating new online class");
return new OnlineClass(10, "New class", false);
}
Optional에 값이 있으면 가져오고 없는 경우에 ~~를 하라.
List<OnlineClass> springClasses = new ArrayList<>();
springClasses.add(new OnlineClass(1, "spring boot", true));
springClasses.add(new OnlineClass(5, "rest api development", false));
Optional<OnlineClass> optional = springClasses.stream()
.filter(oc -> oc.getTitle().startsWith("jpa"))
.findFirst();
OnlineClass onlineClass = optional.orElseGet(App::creatNewClass);
System.out.println(onlineClass.getTitle());
}
private static OnlineClass creatNewClass() {
System.out.println("creating new online class");
return new OnlineClass(10, "New class", false);
}
Optional에 값이 있으면 가져오고 없는 경웨 에러를 던져라
Optional에 들어있는 값 걸러내기
Optional에 들어있는 값 변환하기
Optional<Progress> progress = optional.map(OnlineClass::getProgress);
Optional<Progress> progress1 = optional.map(OnlineClass::getProgress);
Progress progress2 = progress1.orElseThrow();
```