Stream의 최종연산 결과가 종종 Optional타입인 경우가 있다.
Optional은 Stream의 최종연산결과를 다룰때 사용된다.
Optional<T>는 T타입의 객체 를 감싸는 래퍼 클래스이다. Optional타입의 객체에는 모든 타입의 참조변수를 담을 수 있다.
public final class Optional<T>
{
private final T value;
...
}
Optional타입의 객체로 최종연산의 결과를 반환하는경우 Optional객체에 결과를 담아서 반환하는 것이다.
Optional객체의 경우 null을 결과로 받더라도 NullPointerException을 발생시키지 않아 유용하다.
Optional객체 생성
Optional객체를 생성할 때는 of() 또는 ofNullalble()을 사용한다.
ex)
String str = "abc";
Optional<String> optVal = Optional.of(str);
Optional<String> optVal = Optional.of("abc");
Optional<String> optVal = Optional.of(new String("abc"));
참조변수가 null일 가능성이있다면 of()대신 ofNullable()을 사용해야한다.
of()의경우 NullPointerException을 발생시키기 때문이다.
Optional객체 값 가져오기
get() : Optional 객체에 저장된 값을 가져올 때 사용하는 메서드이다.
orElse() : 값이 null일 경우 NoSuchElementException이 발생하는데 이것을 방지하기 위한 메서드
T orElseGet(Supplier<? extends T> other) : null을 대체할 값을 반환하는 람다식을 지정할 수 있다.
T orElseThrow(Supplier<? extends X> exceptionSupplier) : null일 때 지정된 예외를 발생시킬 수 있다.
Optional객체도 filter(), map(), flatMap()을 사용할 수 있다. 단 Optional의 map, flatMap의 반환 타입은 Stream이 아닌 Optional이다.
isPresent()는 Optional객체의 값이 null이면 false를, 아니면 true를 반환한다.
Optional<T>를 반환하는 메서드 목록
Optional<T> findAny()
Optional<T> findFirst()
Optional<T> max(Comparator<? super T> comparator)
Optional<T> min(Comparator<? super T> comparator)
Optional<T> reduce(BinaryOperator<T> accumulator)
Optional 기본형
OptionalInt, OptionalLong, OptionalDouble로 각 기본형을 다루는 Optional들이 있다.
IntStream 에 정의된 메서드 목록
OptionalInt findAny()
OptionalInt findFirst()
OptionalInt reduce(IntBinaryOperator op)
OptionalInt max()
OptionalInt min()
OptionalDouble average()
Optional을 다루는 예제이다.
'Programming > JAVA' 카테고리의 다른 글
collect() (0) | 2021.09.02 |
---|---|
스트림의 최종연산 (0) | 2021.09.01 |
스트림(Stream)의 중간연산 (0) | 2021.08.25 |
스트림(Stream) (0) | 2021.08.24 |
다양한 함수형 인터페이스 & 메서드 참조 (0) | 2021.08.22 |