반응형

출처 : 이것이 자바다

 

16.1 스트림 소개

스트림은 자바8부터 추가된 컬렉션 (배열 포함) 의 저장 요소를 하나씩 참조해서 람다식 (함수적 - 스타일(functional-style))으로 처리 할 수 있도록 해주는 반복자이다.

 

16.1.1 반복자 스트림

자바 7 이전 까지는 List<String> 컬렉션에서 요소를 순차적으로 처리하기 위해 Iterator 반복자 사용

 

Stream으로 변경 한다.

 

16.1.2 스트림의 특징

Stream은 Iterator와 비슷한 역할을 하는 반복자이지만, 람다식으로 요소 처리 코드를 제공하는 점과 내부 반복자를 사용하므로 병렬 처리가 쉽다는 점 그리고 중간 처리와 최종 처리 작업을 수행하는 점에서 많은 차이를 가지고 있다. 

 

람다식으로 요소 처리 코드를 제공한다.

내부 반복자를 사용하므로 병렬처리가 쉽다.

스트림은 중간 처리와 최종 처리를 할 수 있다.

 

16.2 스트림의 종류

Stream 

IntStream, LongStream, DoubleStream

 

16.2.1 컬렉션으로부터 스트림 얻기

 

16.2.2 배열로 부터 스트림 얻기

 

16.2.3 숫자 범위로 부터 스트림 얻기

 

16.2.4 파일로부터 스트림 얻기

 

16.2.5 디렉토리로부터 스트림 얻기

 

16.3  스트림 파이프라인

대량의 데이터를 가공해서 축소하는 것을 일반적으로 리덕션이라고 한다.

 

16.3.1 중간 처리와 쵲ㅇ 처리

푀종처리를 파이프라인으로 해결한다.

 

지연 (lazy)

 

16.3.2 중간 처리 메소드와 최종 처리 메소드

리턴 타입으로 구분한다.

 

16.4 필터링(distinct(), filter())

필터링은 중간 처리 기능으로 요소를 걸러내는 역할을 한다.

distinct() 중복을 제거

 

16.5 매핑(flatMapXXX(), mapXXX(), asXXXStream(), boxed())

16.5.1 flatMapXXX()메소드 

요소를 대체하는 복수 개의 요소들로 구성된 새로운 스트림을 리턴한다.

16.5.2 mapXXX()메소드

요소를 대체하는 요소로 구성된 새로운 스트림을 리턴한다.

16.5.3 asDoubleStream(),asLongStream(), boxed()메소드

asDoubleStream() IntStream의 int 요소 또는 LongStream의 long요소를 double요소로 타입 변환해서 DoubleStream을 생성

asLongStream() IntStream의 int 요소를 long 요소로 타입 변환해서 LongStream을 생성

boxed() int ,long, double요소를 Integer, Long, Double요소로 박싱해서 Stream을 생성한다.

 

16.6 정렬(sorted())

스트림은 요소가 최종 처리되기 전에 중단 단계에서 요소를 정렬해서 최종 처리 순서를 변경할 수 있다.

sorted()

Comparable 

 

16.7 루핑(peek(), forEach())

루핑은 요소 전체를 반복하는 것을 말한다. 

루핑하는 메소드에는 peek(), forEach()

peek 중간 처리 메소드이고 

forEach() 최종 처리 메소드이다.

 

16.8 매칭(allMatch(), anyMach(),nonMatch())

allMatch() : 모든 요소들이 매개값으로 주어진 Predicate의 조건을 만족하는지 조사하고 

anyMach() : 최소한 한 개의 요소가 매개값으로 주어진 Predicate의 조건을 만족하는지 조사한다.

nonMatch() : 모든 요소들이 매개값으로 주어진 Predicate 의 조건을 만족하지 않는지 조사한다.

 

16.9 기본 집계(sum(), count(), average(), max(), min())

집계는 최종 처리 기능으로 요소들을 처리해서 카운팅, 합계 , 평균값, 최대값, 최소값 등과 같이 하나의 값으로 산출하는 것을 말한다.

 

16.9.1 스트림이 제공하는 기본 집계

OptionalXXX는 자바 8에서 추가한 java.util패키지

 

16.9.2 Optional 클래스

저장하는 값의 타입만 다를 뿐 제공하는 기능은 거의 동일하다.

 

16.10 커스텀 집계(reduce())

sum(), average(), count(), max(), min()을 제공

프로그램화해서 다양한 집계 결과물을 만들 수 있도록 reduce()메소드에 제공한다.

 

16.11 수집(collect())

스트림은 요소들을 필터링 또는 매핑한 후 요소들을 수집하는 최종 처리 메소드인 collect()를 제공하고 있다.

 

16.11.1 필터링한 요소 수집

Stream의 collect(Collector<T, A,R> collector)메소드는 필터링 또는 매핑된 요소들을 새로운 컬렉션에 수집하고 , 이 컬렉션을 리턴한다.

 

16.11.2 사용자 정의 컨테이너에 수집하기

collect()

 

16.11.3 요소를 그루핑해서 수집

collect()메소드는 단순히 요소를 수집하는 기능 이외에 컬렉션의 요소들을 그룹핑해서 Map객체를 생성하는 기능도 제공한다.

groupingBy() 또는 groupingByConcurrent()가 리턴하는 Collector를 매개값으로 대입하면 된다.

 

16.11.4 그룹핑 후 매핑 및 집계

Collectors.groupingBy()메소드는 그룹핑 후 , 매핑이나 집계( 평균, 카운팅, 연결, 최대 , 최소, 합계)를 할 수 있도록 두 번째 매개값으로 Collector를 가질 수 있다.

 

 

16.12 병렬처리

멀티 코어 cpu환경에서 하나의 작업을 분할해서 각각의 코어가 병렬적으로 처리하는 것을 말하는데, 병렬처리의 목적은 작업 처리 시간을 줄이기 위한 것이다.

 

16.12.1 동시성 과 병렬성

16.12.2 포크조인(ForkJoin)프레임워크

병렬 스트림은 요소들을 병렬 처리하기 위해 포크조인 프레임워크를 사용한다.

 

16.12.3 병렬 스트림 생성

 

16.12.4 병렬 처리 성능

요소의 수와 요소당 처리 시간

스트림 소스의 종류

코어(Core)의 수

 

반응형

' > 이것이 자바다' 카테고리의 다른 글

17. JavaFX 18. IO 기반 입출력 및 네트워킹  (0) 2020.10.23
15. 컬렉션 프레임워크  (0) 2020.10.13
13. 제네릭 14. 람다식  (0) 2020.10.10
12. 멀티 스레드  (0) 2020.10.03
11. 기본 API 클래스  (0) 2020.10.02

+ Recent posts