자바(Java) 스트림

유필선·2024년 5월 2일
1

자바(Java)

목록 보기
20/20

스트림(Stream)

스트림은 람다를 활용할 수 있는 기술 중 하나이다. 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있다. 또한 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있다.

즉, 배열과 컬렉션을 함수형으로 처리할 수 있다.

스트림은 병렬처리가 가능하다.
병렬처리란, 하나의 작업을 둘 이상의 작업으로 잘게 나눠서 동시에 진행하는 것이라 하고,
이로인해서 쓰레드를 이용해 많은 요소들을 빠르게 처리할 수 있다.

스트림에 대한 내용응 크게 세 가지로 분류

    1. 생성하기 : 스트림 인스턴스 생성
    1. 가공하기 : 필터링 및 맵핑 등 원하는 결과를 만들어가는 중간 작업
    1. 결과 만들기 : 최종적으로 결과를 만들어 내는 작업

생성하기

보통 배열과 컬렉션을 이용해서 스트림을 만들지만 이 외에도 다양한 방법으로 스트림을 만들 수 있다.

기본 타입형

range와 rangeClosed를 사용하여 스트림을 생성할 수 있다.

배열 스트림

스트림은 배열 또는 컬렉션 인스턴스를 이용해서 생성할 수 있고 배열은 다음과 같이 Arrays.stream 메서드를 사용


resultArr 에 기존 arr에 있는 배열을 저장합니다.

가공하기

가공하는 것을 중간 작업 이라고 하는데, 이러한 작업은 스트림을 리턴하기 때문에 여러 작업을 이어 붙여서(chaining) 작성할 수 있다.

filter , map 사용하기

  • 필터(filter)
    필터는 스트림 내 요소들을 하나씩 걸러내는 작업이고, 인자로 받은 predicate는 boolean을 리턴하는 함수형 인터페이스로 평가식이 들어간다

  • 맵(map)
    맵은 스트림 내 요소들을 하나씩 특정 값으로 변환한다. 이 때 값을 변환하기 위한 람다를 인자로 받는다.

<R> Stream<R> map(Function<? super T, ? extends R> mapper);

스트림에 들어가 있는 값이 input이 되어서 특정 로직을 거친 후 output이 되어 새로운 스트림에 담기게 된다. 이러한 작업을 맵핑이라 한다.

filter와 map을 사용한 예제


일반 자바의 for을 사용하여 홀수 값을 제거 후 나머지 값에 x2하는 예제 이다.

다음은 스트림을 활용한 예제를 확인해 보자

스트림을 사용하면 간단하게 몇 줄을 작성하는 것만으로도 끝이 나는것을 확인 할 수 있다.

profile
이해해버려라!

0개의 댓글