본문 바로가기
Back-End/Java

[java] Stream 총정리

by LeeGangEun 2022. 8. 9.

스트림이란?


스트림(Stream)은 자바 8에서 추가된 기능으로 함수형 인터페이스인 람다(lambda)를 활용할 수 있는 기술이다.
예전에는 배열이나 컬렉션을 반복문을 순회하면서 요소를 하나씩 꺼내 여러가지 코드를(예를 들어 if 조건문 등) 섞어서 작성했다면
스트림과 람다를 이용하여 코드의 양을 대폭 줄이고 조금 더 간결하게 코드를 작성할 수 있다.

또한 스트림을 이용하면 멀티 스레드 환경에 필요한 코드를 작성하지 않고도 데이터를 병렬로 처리할 수 있다.
결론은 스레드를 이용하여 많은 데이터들을 빠르게 처리할 수 있다.
기존의 반복문을 사용한다면 synchronized와 같은 병렬성을 위한 동기화 코드를 관리해야 한다.

스트림은 크게 3가지 단계로 동작한다.
1. 컬렉션이나 배열 등으로부터 스트림을 생성하는 작업(Stream Source),
2. 스트림을 필터링하거나 요소를 알맞게 변환하는 중간 연산(Intermediate Operations)
3. 마지막으로 최종적인 결과를 도출하는 단말 연산(Terminal Operations)

컬렉션(Colletion)으로 생성


기본적으로 컬렉션 구현 클래스의 stream 메서드를 이용하여 스트림을 생성할 수 있다.

// of 메서드는 자바 9부터 지원
List<String> list = List.of("mad", "play");
Stream<String> stream = list.stream();

 

 

배열의 원소를 가공하는데 있어

map, filter, sorted 등 이 있다.

 

map은 요소들을 특정조건에 해당하는 값으로 변환해 준다.

요소들을 대,소문자 변형 등 의 작업을 하고 싶을떄 사용 가능 하다..

 

filter는 요소들을 조건에 따라 걸러내는 작업을 해준다.

길이의 제한, 특정문자포함 등 의 작업을 하고 싶을때 사용 가능하다.

 

sorted는 요소들을 정렬해주는 작업을 해준다.

요소들의 가공이 끝났다면 리턴해줄 결과를 collect 를 통해 만들어준다.