자바

자바 스트림 Java Stream -> 스트림 파이프 라인과 필터링 (distinct(), filter())

알통몬_ 2017. 3. 30. 20:57
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

2017/03/30 - [자바] - 자바 스트림 Java Stream => 스트림의 종류


리덕션 => 대량의 데이터를 가공해서 축소하는 것을 일반적으로 일컫는 말.

리덕션의 결과물로는

데이터의 합계, 평균 값, 카운팅, 최댓값, 최솟값 등이 있습니다.

컬렉션의 요소를 리덕션의 결과물로 바로 집계할 수 없는 경우에

집계하기 좋도록 필터링, 매핑, 정렬, 그룹핑등의 중간처리가 필요합니다.


스트림에서는 중간 처리와 최종 처리를 파이프 라인으로 해결하는데요.

여러 개의 스트림이 연결되어 있는 구조를 파이프 라인이라고 합니다.

파이프 라인에서 최종 처리를 제외하면 전부 중간 처리 스트림입니다.


중간 스트림 생성 시 요소들이 바로 중간 처리가 되는 것이 아닙니다.

최종 처리가 시작되기 전까지 지연되었다가 최종 처리가 시작되면

컬렉션의 요소가 하나씩 중간 스트림에서 처리가 되고 최종 처리까지 오게 됩니다.


스트림 인터페이스에는 필터링, 매핑, 정렬 둥의 많은 중간 처리 메소드가 있고,

이 메소드들은 중간 처리된 스트림을 리턴합니다.

그리고 이 스트림에서 다시 중간 처리 메소드를 호출해 파이프 라인을 형성합니다.

예) 회원 컬렉션에서 남자만 필터링하는 중간 스트림을 연결하고 다시 남자의

나이로 매핑하는 스트림을 연결한 후, 최종 남자 평균 나이를 집계한다면?

파이프 라인은 아래 그림처럼 형성됩니다.

예제)

중간 처리 메소드와 최종 처리 메소드는 리턴 타입을 보고 구분할 수 잇습니다.

리턴 타입이 스트림이라면 중간 처리 메소드이고,

리턴 타입이 기본 타입이거나 OptionalXX 라면 최종 처리 메소드입니다.

위 표에서 소속된 인터페이스에 공통이라는 의미는

Stream, IntStream, LongStream, DoubleStream이 모두 제공된다는 것을 의미합니다.



필터링 distinct(), filter()

필터링이란 => 중간 처리 기능으로써 요소를 걸러내는 역할

필터링 메소드인 distinct() 와 filter()는 모든 스트림이 가지고 있는 공통 메소드입니다.

distinct()는 중복을 제거합니다.

Stream의 경우 Object.equals(Object)가 true이면 동일한 객체로 판단하고 중복을 제거합니다.

IntStream, LongStream, DoubleStream 은 동일 값일 경우 중복을 제거합니다.


예제)


이상입니다.

다음 포스팅에서는 매핑과 정렬에 대해 공부하겠습니다.

반응형