티스토리 뷰

Optional<T> 객체는 T타입의 객체 또는 객체가 없는(null) 경우의 wrapper다.


이 Optional을 효과적으로 사용하기 위해서는 올바른 값을 소비하거나,

대체값을 생산하는 메소드를 사용해야 한다


ifPresent 메소드는 함수를 인자로 받아 값이 존재하면 인자를 받은 함수를 실행하고,

그렇지 않으면 아무 일도 일어나지 않는다.


그러므로 if(obj != null) 처리   대신  opt.ifPresent(obj->{처리}); 로 사용할 수 있다 개꿀


ifPresent는 값을 리턴하지 않기 때문에 값을 리턴받으려면 map 메소드를 사용해야 한다.


Optional<String> opt = opt2.map(Object::toString);

이렇게 하면 객체의 toString이 호출되어 결과값이 담겨나온다.





또한 결과값이 없을 때 대체값을 생산하는 방법이 있다.

Optional의 orElse 메소드를 호출하면 인자로 전달된 값이 null값을 대체한다.


String result = opt.orElse("대체값"); //opt는 Optional<String>의 객체이다.


이 코드를 실행하면 opt의 결과값이 없을 경우 "대체값"이란 String객체가 리턴된다.





또한 대체값으로 함수를 인자로 전달 할 수 있다.

Optional의 orElseGet 메소드를 사용하면 인자없는 함수를 전달한다.


String result = opt.orElseGet(()->"대체값");


이전의 예제와 같이 "대체값"이라는 상수를 리턴한다.

꼭 상수가 아니더라도 메소드 안에서 연산을 통해 변수도 리턴이 가능하다.





그리고 값이 없을 때 예외를 던질 수도 있다.

String result = opt.orElseThrow(NullPointerException::new);

이 코드는 결과값이 없을 때 NullPointerException을 생성해 던진다.

꼭 NullPointerException이 아니라 다른 예외도 던질 수 있다.

'JAVA' 카테고리의 다른 글

[Stream] 리덕션(reduction) 연산  (0) 2015.04.02
[Stream] Optional 옵션값 생성하기  (0) 2015.04.02
[Stream] 단순 리덕션(reduction)  (0) 2015.04.02
[Stream] 스트림을 이용해 정렬하기  (0) 2015.04.01
[Stream] 상태유지변환  (0) 2015.04.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함