1. 개요
Java Stream API란, 자바에서도 함수형 프로그래밍을 작성할 수 있도록 지원하는 API입니다. 데이터를 추상화, 처리 등에 있어 자주 사용되는 기능들을 정의가 되어있어 사용자는 사용만 하면 됩니다.
2. 특징
Stream API는 아래와 같은 특징이 있습니다.
1. 스트림은 일회용으로 재사용을 할 수 없습니다.
2. 원본데이터를 훼손하지 않습니다.
Stream API는 크게 3가지 단계로 구성됩니다.
1. Stream 생성
2. 중간 연산
3. 최종 연산
각 단계 별로 어떤 함수(메소드)를 사용하면 되고 어떠한 기능들이 있는지 알아볼 수 있도록 합니다.
해당 문서에서는 collections에서 사용하는 stream을 기준으로 작성했으며,
Arrays나 StreamSupport는 다음문서에서 알아볼 수 있도록 하겠습니다.
intStream이나 doubleStream, LongStream도 다음문서에서 다루도록 하겠습니다.
1. Stream 생성
stream 생성은 매우 간단합니다. 만들어진 자료구조에 아래의 메소드를 호출하기만 하면 stream생성은 완료됩니다.
Stream 생성자 | 설명 |
stream() | collections로 만들어진 자료구조를 stream으로 생성합니다. |
parallelStream() | collections로 만들어진 자료구조를 병렬처리 할 수 있는 stream으로 생성합니다. |
parallelStream()은 설명이 길어질 수 있어 나중에 다시 다루도록 하겠습니다.
2. 중간 연산
중간 연산은 생성된 stream의 데이터를 가공 / 처리 등을 하기 위한 단계입니다.
가공 / 처리가 완료된 결과물은 stream으로 반환하기 때문에 추가적인 가공 / 처리가 가능합니다.
중간 연산자 | 설명 |
filter | 입력받은 매개 값을 조건으로 하여, 결과값이 참인 요소에 대해서만 데이터를 추출합니다. 모든 요소를 검사합니다. |
takeWhile | 입력받은 매개 값을 조건으로 하여, 결과값이 false를 반환할 때까지의 요소를 추출합니다. filter와 다르게 조건의 결과가 false인 경우 이후 요소는 검사하지않습니다. 정렬된 데이터에서 유용하게 사용할 수 있습니다. |
dropWhile | 입력받은 매개 값을 조건으로 하여, 결과값이 fasle를 반환할 때까지의 요소를 전부 버리고 이후 요소를 추출합니다. filter와 다르게 조건의 결과가 false인 경우 이후 요소는 검사하지않습니다. 정렬된 데이터에서 유용하게 사용할 수 있습니다. |
distinct | 중복되는 요소의 데이터를 제거합니다. |
map | 매개 값을 통해 기존 요소를 새로운 요소로 구성합니다. |
flatMap | 매개 값을 통해 여러개의 요소들로 구성합니다. 2차원 이상의 데이터 형태에서 많이 사용합니다. |
sorted | 매개 값을 Comparator를 넘겨 요소들을 정렬합니다. |
peek | 반복을 통해 각 요소들에 대해 제어를 할 수 있습니다. forEach와 비슷한 기능입니다. |
limit | 매개 값만큼 요소를 가져와 새로운 stream으로 구성합니다. |
skip | 매가 값만큼 요소를 건너 뛴 이후의 요소를 가져와 새로운 stream을 구성합니다. |
3. 최종 연산
최종 연산은 가공 / 처리된 데이터를 원하는 결과로 만들기 위한 단계입니다.
최종 연산은 단 한번만 수행되며 이후 데이터는 원하는 형태의 데이터로 반환합니다.
최종 연산자 | 설명 |
forEach | 반복을 통해 요소들에 대해 제어를 할 수 있습니다. peek와 비슷한 기능입니다. |
allMatch | 입력받은 매개 값을 조건으로 하여 모든 요소가 조건을 일치하는지 검사합니다. |
anyMatch | 입력받은 매개 값을 조건으로 하여 하나 이상의 요소가 조건을 일치하는지 검사합니다. |
noneMatch | 입력받은 매개 값을 조건으로 하여 모든 요소가 조건을 일치하지않는지 검사합니다. |
count | 요소의 갯수를 구합니다. |
sum | 숫자로 이루어진 요소의 합계를 구합니다. |
average | 숫자로 이루어진 요소의 평균 값을 구합니다. |
max | 숫자로 이루어진 요소 중 가장 큰 값을 구합니다. |
min | 숫자로 이루어진 요소 중 가장 작은 값을 구합니다. |
collect | List, Map, Set등 결과물을 collections 형태로 표현합니다. |
reduce | 집계 결과물을 다양하게 나타낼 때 사용합니다. - accumulator: 각 요소를 계산한 중간 결과를 생성하기 위해 사용합니다. - identity: 계산을 수행하기 위한 초기값을 지정합니다. - Combiner: 병렬 스트림에서 나누어 계산된 결과를 하나로 합치기 위해 사용합니다. |
추후에 여건이 된다면 Predicate, Supplier 등 자세하게 설명해보도록 하겠습니다.
'개발 > Java' 카테고리의 다른 글
[Jackson] ObjectMapper 기본 사용법 (0) | 2023.09.17 |
---|