티스토리 뷰

JAVA

[Stream] 단순 리덕션(reduction)

박중수 2015. 4. 2. 19:52

리덕션은 스트림을 프로그램에서 사용가능한 값으로 만들어준다.

리덕션은 최종연산이므로 이를 사용하면 스트림은 더이상 사용할 수가 없어 소각장에 버려야한다.

리덕션 메소드 중 몇몇은 결과를 감싸고 있거나 결과가 없음을 나타내는 Optional<T> 타입의 값을

리턴한다.

보통은 결과가 없으면 null을 리턴하지만 그렇다면 예기치 못한 NullPointerException을 만날 수 있다.

이 Optional<T> 타입은 결과값이 없어도 프로그램이 잘 돌아가도록 도와준다.


하나를 예로 들자면 Stream의 max() 메소드는 이 Optional 타입을 리턴하는데 사용법은 아래와 같다.


Optional<String> opt = list.stream().max(String::length);

System.out.println(opt.isPresent() ? opt.get() : "결과없음");


이는 길이가 가장 긴 문자열을 골라내서 출력하는 프로그램이다.

isPresent 메소드가 결과값이 있는지 여부를 boolean 타입으로 리턴해준다.

그리고 값이 있으면 get() 메소드로 값을 가져온다.

get() 메소드는  값이 없으면 NoSuchElementException을 날린다.

그러므로 isPresent()로 미리 값의 존재여부를 확인한다.


하지만 이렇게 하면

if(obj != null) System.out.println(obj);

이 코드와 크게 다를 것이 없다. 이 클래스는 null 처리를 안전하게 하기 위해 만들었는데

이러면 뭔가 부족하다


Optional에 대한 상세한 설명은 다음에서 이어하겠다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/05   »
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
글 보관함