특징
Member member = memberRepository.findById(memberId)
.orElseThrow(MemberNotFoundException :: new)
//실제로는 Optional 타입이다.
Optional 사용 방법
empty()
특징
Optional<String> empty = Optional.empty();
//아웃풋
System.out.println(empty.isEmpty()) //true
of(T value)
전달된 값으로 새로운 Optional 객체를 생성
리턴값: Optional<T>
예제
//Optional 메소드
Optional <String> opt = Optional.of("Hello");
//아웃풋
System.out.println(opt.get()); // Hello
OfNullable(T value)
비어있을 수도 있고, 아닐 수도 있는 Optional 객체를 생성
반환값 : Optional<T>
예시
// Optional 메소드
String imNull = null;
Optional<String> opt = Optional.ofNullable(imNull);
Optional<String> opt1 = Optional.ofNullable("Hello");
//아웃풋
System.out.println(opt.isEmpty()); //true
System.out.println(opt1.isEmpty()); //false
equals(Object obj)
특징
//인풋
Optional<String> opt1 =Optional.of("Hello");
Optional<String> opt2 = Optional.of("Hello");
Optional<String> opt3 = Optional.of("World");
// Optional 메소드
boolean isEqual1 = opt1.equals(opt2);
boolean isEqual2 = opt1.equals(opt3);
//아웃풋
System.out.println(isEqual1); //true
System.out.println(isEqual2); //false
filter()
filter(Predicate <? Super T> predicate)
특징
Optional<Integer> opt1 = Optional.of(10);
Optional<Integer> opt2 = Optional.of(1);
// Optional 메소드
Optional <Integer> filter1 = opt1.filter(num -> num < 5);
Optional <Integer> filter2 = opt2.filter(num -> num < 5);
//아웃풋
System.out.println(filter1.isEmpty()); //true
System.out.println(filter2.isEmpty()); //false
map()
Optional 객체 내부의 값을 변환하여 결과를 새로운 Optional 객체로 반환
리턴값 : Optional<U>
예시
//인풋
Optional<String> optional = Optional.of("hello");
//Optional 메소드
Optional<Integer> result = Optional.map(s -> s.length());
// 아웃풋
SYstem.out.println(result.get()); //5
flatMap()
.flatMap(Function <? Super T, ? Extends Optional <? Extends U>> mapper)
특징
예시
Optional <String> opt = Optional.of("Hello");
//Optional 메소드
Optional<String> flatMappedOpt = opt.flatmap(str -> Optional.of(str.toUpperCase()));
//아웃풋
System.out.println(flatMappedOpt.get()); //HELLO
get()
Optional<String> opt1 = Optional.ofNullable("Hello");
Optional<String> opt2 = Optional.ofNullable(null);
// 아웃풋
System.out.println(opt1.get()); //Hello
System.out.println(opt2.get()); //NoSuchElementException
isEmpty()
//인풋
Optional<String> opt1 = Optional.ofNullable("Hello");
Optional<String> opt2 = Optional.ofNullable(null);
//아웃풋
System.out.println(opt1.isEmpty()); //false
System.out.println(opt2.isEmpty()); //true
isPresent()
// 인풋
Optional<String> opt1 = Optional.ofNullable("Hello");
Optional<String> opt2 = Optional.ofNullable(null);
// 아웃풋
System.out.println(opt1.isPresent()); //true
System.out.println(opt2.isPresent()); //false
ifPresent()
// 인풋
Optional<String> opt1 = Optional.ofNullable("Hello");
Optional<String> opt2 = Optional.ofNullable(null);
//아웃풋
opt1.ifPresent(str -> System.out.println(str)); //Hello
opt2.ifPresent(str -> System.out.println(str));
ifPresentOrElse()
ifPresentOrElse(Consumer<? Super T> action, Runnable emptyAction)
특징
예제
// 인풋
Optional<String> opt1 = Optional.ofNullable("Hello");
Optional<String> opt2 = Optional.ofNullable(null);
//아웃풋
opt1.ifPresentOrElse(str -> System.out.println(str),() -> System.out.println("null")); // Hello
opt2.ifPresentOrElse(str -> System.out.println(str),
() -> System.out.println("null")); //null
or()
// 인풋
Optional<String> optional1= Optional.empty();
Optional<String> optional2 = Optional.of("Hello");
// Optional 메소드 사용
Optional<String> result1 = optional1.or(() -> Optional.of("World"));
Optional<String> result2 = optional2.or(()-> Optional.of("World"));
// 아웃풋
System.out.println (result1.get()); // World
System.out.println(result2.get()); // Hello
orElse(0