기록과 정리

Java8 Stream API (스트림 API) 본문

IT/Java

Java8 Stream API (스트림 API)

zepetto 2021. 8. 12. 22:36

이 글은 백기선님의 '더 자바, Java 8' 강의를 참고하였습니다.

https://www.inflearn.com/course/the-java-java8/lecture/48041?speed=1&tab=curriculum 

 

더 자바, Java 8 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

Stream 소개 

스트림은 왜 사용하며 도대체 어떻게 사용하는가?

  • sequence of elements supporting sequential and parallel aggregate operations

순차적 또는 병렬적 집계 작업을 도와주는 요소들의 시퀀스 (영어를 잘 못함) 직역(?)하면 이러하다. 이러한 번역으로 볼 때, 단순히 데이터를 담고있는 저장소가 아님을 알 수 있다. 

 

스트림은 데이터 소스를 변경하지 않고 스트림으로 처리하는 데이터는 오직 한번만 처리를 한다. 또한 스트림 파이프라인 안에서 처리되는 로직 구조로 인해 Lazy하다라고 말할 수 있다. ( Lazy하다? -> 미루고미루고미루는 ..?)

 

스트림 파이프라인 예시

오퍼레이터

 

스트림에는 두가지 오퍼레이터가 있다.

  • 중개 오퍼레이터
  • 종료 오퍼레이터

중개 오퍼레이터

중개 오퍼레이터는 Stream return 한다. (ex.f filter, map, limit, skip, sorted...)

map이 중개형 오퍼레이터

map을 통해 출력과 대문자로 바꾼 후, 출력을 시도하면 출력이 되지않는다. 여기서 필요한것이 바로 종료 오퍼레이터(collect)

 

종료 오퍼레이터

중개 오퍼레이터와 달리 Stream을 리턴하지 않으며 ( 위 코드에서는 List<String> 을 반환 ) 주로 collect, allMatch, count, forEach, min, max등이 있다.

List가 출력

또한 이러한 구조 때문에 병렬적인 처리가 가능하다. 

 

스트림 API

그러면 Stream을 도대체 왜 사용하는지는 알았으니 , 어떻게 사용하는지 알아보자.

  • Filter : 걸러내는 용도
  • map : 형태를 바꾸는 용도
  • generate 또는 iterate : 생성하는 용도 (ex> 10부터 1씩 증가.., 랜덤 int 무제한 스트림)
  • limit 또는 skip : 최대 5개 요소 담긴 스트림을 리턴, 앞에서 3개를 뺀 나머지 리턴
  • count : 개수를 세기
  • reduce : 모든 데이터를 하나의 List에 옮겨 담기

이외에도 많지만 조금씩 수정 및 추가하겠다.

다음과 같은 list가 있다고 가정해보자
Spring으로 filter(중개)로 걸러서 forEach 로 순회하며 출력
그외 예시들

이것저것 문장을 만들어 연습을 해보도록 하자.

'IT > Java' 카테고리의 다른 글

Date와 Time API  (0) 2021.08.31
Java Optional  (0) 2021.08.23
기본 메서드와 스태틱 메서드  (0) 2021.08.03
Iterator/ListIterator/Enumeration 란?  (0) 2021.07.30
람다표현식&메소드 레퍼런스  (0) 2021.07.26