of() Option.of(someValue) someValue가 null 이면 NPE 발생
ofNullable() Optional opt = Optional.ofNullable(someValue); someValue가 null이여도 Null 이 들어간 Optional이 생성됨
empty() Optional opt = 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 result = opt.or(()->Optional.of(“defalut”)); //opt 안에 값이 없을 때 optional을 리턴함
값이 없으면 익셉션, 있으면 값 리턴
Member m = opt.orElseThrow(()->new NoMemberExcetion());
map. 값이 없으면 빈 Optional 리턴
map에 전달받은 함수를 실행해서 값을 변환한 Optional 리턴, 값이 없으면 빈 Optional리턴 Optional birthOpt = memOpt.map(mem-> mem.getBirthday()); Optional pdOpt = memOpt.map(birth-> cal(birth));
Optional memOpt.map(mem-> mem.getBirthday()).map(birth-> cal(birth)); 형태로도 사용 가능
flatMap
flatMap에 전달한 함수가 Optional을 리턴할 때 사용한다, 여러겹의 Option을 벗겨낸다고 보면 됨. 아래 map, flatMap의 차이를 보자