생성방법
of()
Option.of(someValue)
someValue가 null 이면 NPE 발생ofNullable()
Optionalopt = Optional.ofNullable(someValue);
someValue가 null이여도 Null 이 들어간 Optional이 생성됨empty()
Optionalopt = Optional.empty(); // Optional.ofNullable()와 동일
값 구하기
- get()
opt.get();
값이 없을 땐 NoSuchElementException 발생
값 유무 확인
isPresent()
isEmpty() // 자바 11부터 생김
값이 있으면 하기
String result = opt.ifPresent(value -> doSome(value));
String result = opt.ifPresentOrElse(
value -> doSome(value), // 값이 있을 때 실행
() -> doOther() //값이 없을 때 실행
);
값이 없으면 다른 값 사용
String result = opt.orElse(“default”);
String result = opt.orElseGet(()->”defalut”); //orElse처럼 값이 없을 때 함수를 활용하여 새로운 값을 returen함
Option
값이 없으면 익셉션, 있으면 값 리턴
Member m = opt.orElseThrow(()->new NoMemberExcetion());
map. 값이 없으면 빈 Optional 리턴
map에 전달받은 함수를 실행해서 값을 변환한 Optional 리턴, 값이 없으면 빈 Optional리턴
Optional
Optional
Optional
flatMap
flatMap에 전달한 함수가 Optional을 리턴할 때 사용한다,
여러겹의 Option을 벗겨낸다고 보면 됨.
아래 map, flatMap의 차이를 보자
Optional
Optional<Optional
filter
값을 충족하면 값 그대로 리턴하고 충족하지 않으면 빈 Optional 리턴
Optional
filterd.ifPresent(str -> System.out.println(str));
두개 Optional 조합
1 | Member m = ...; |
를 두개의 Optional로 짜보자
1 | Optional<Member> memOpt = ...; |
1 | Member m1 = ...; |
를 두개의 Optional로 짜보자
1 | Optional<Member> mem1Opt = ...; |
ifPresent를 사용하면 null 사용할 때와 유사한 구조가 된다.
대신 map, flatMap, filter, orElse, or, ifPresent등 익숙해지자