Optional 만들기
Optional에 값이 있는지 없는지 확인하기
isPresent()
Optional<OnlineClass> spring =
springClasses.stream()
.filter(onlineClass -> onlineClass.getTitle().startsWith("spring"))
.findFirst();
spring.isPresent();
isEmpty() (Java 11부터 제공)
Optional에 있는 값 가져오기
Optional에 값이 있는 경우에 그 값을 가지고 ~~를 하라.
ifPresent(Consumer)
예) Spring으로 시작하는 수업이 있으면 id를 출력하라.
spring.ifPresent(onlineClass -> {
System.out.println(onlineClass.getId());
});
Optional에 값이 있으면 가져오고 없는 경우에 ~~를 리턴하라.
orElse(T)
예) JPA로 시작하는 수업이 없다면 비어있는 수업을 리턴하라.
Optional<OnlineClass> spring =
springClasses.stream()
.filter(onlineClass -> onlineClass.getTitle().startsWith("JPA"))
.findFirst();
OnlineClass onlineClass = spring.orElse(createNewClass());
...
private static OnlineClass createNewClass() {
return new OnlineClass(10, "New Class", false);
}
Optional에 값이 있으면 가져오고 없는 경우에 ~~를 하라.
orElseGet(Supplier)
예) JPA로 시작하는 수업이 없다면 새로 만들어서 리턴하라.
Optional<OnlineClass> spring =
springClasses.stream()
.filter(onlineClass -> onlineClass.getTitle().startsWith("JPA"))
.findFirst();
OnlineClass onlineClass = spring.orElseGet(() -> createNewClass());
...
private static OnlineClass createNewClass() {
return new OnlineClass(10, "New Class", false);
}
Optional에 값이 있으면 가져오고 없는 경우 에러를 던져라.
orElseThrow()
spring.orElseThrow(() -> new IllegalArgumentException());
Optional에 들어있는 값 걸러내기
Optional filter(Predicate)
Optional<OnlineClass> onlineClass = spring.filter(oc -> oc.isClosed());
Optional에 들어있는 값 변환하기
Optional map(Function)
Optional<Integer> integer = spring.map(oc -> oc.getId());
Optional flatMap(Function): Optional 안에 들어있는 인스턴스가 Optional인 경우에 사용하면 편리하다.
Optional<Progress> progress = spring.flatMap(oc -> oc.getProgress());