Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발자 도전기

[JAVA] Stream API 본문

개발공부/JAVA

[JAVA] Stream API

jnnjnn 2024. 3. 21. 17:01

스트림이란?

컬렉션 및 배열의 요소를 반복 처리하기 위해 사용할 수 있는 API이다.

스트림은 요소들이 하나씩 흘러가면서 처리된다는 의미를 가지고 있다.

Stream은 구현체가 없는 인터페이스로, 직접 객체를 생성할 수는 없고.

컬렉션의 stream() 함수를 통해서 Stream 객체를 생성해 Stream 타입에 대입해 줄 수 있다.

중간 연산과 최종 연산

스트림은 중간 연산(intermediate operation)최종 연산(terminal operation)으로 구성되어 있다.
여러 개의 스트림이 연결되어 있는 것을 스트림 파이프라인이라고 한다.

 

List<Integer> list = List.of(8, 2, 5, 1, 10, 9, 2, 1, 0);

        list.stream()
                .sorted(Comparator.reverseOrder())
                .distinct()
                .skip(2)
                .limit(1)
                .forEach(System.out::println);

 

  • 중간 스트림 : 필터링, 매핑, 정렬
  • 최종 처리 : 집계(카운팅, 총합, 평균)

 

자주 사용하는 중간 연산과 최종 연산 메소드

중간 연산 fillter(), map(), distinct(), sorted(), peek(), limit(), skip()
최종 연산 forEach(), collect(), count(), reduce(), anyMatch(), allMatch(), max(), min()

 

 

reduce()

Stream의 reduce() 메소드는 최종 연산으로 스트림의 모든 요소를 결합하여 하나의 결과값을 생성하는 데 사용된다.

 

초기값을 가지는 것과 가지지 않는 것 두가지로 오버로딩 되어있다.

리턴 타입 메소드(파라미터)
Optional<T> reduce(BinaryOperator<T> accumulator)
T reduce(T identity, BinaryOperator accumulator)

 

BinaryOperator는 함수형 인터페이스로 두 개의 매개값을 받는 apply() 메소드를 가지고 있다.

 

초기값이 없을 경우, 입력된 값이 null이 아니라면 가장 처음의 요소를 초기값으로 가지도록 한다. 초기값을 지정하지 않으면 Optional.empty를 반환한다. 

 

초기값이 있을 경우, 초기값인 identity를 반환한다.

 

다음은 sum()과 동일한 결과를 산출하는 reduce() 메소드 사용 예제이다.

import java.util.Arrays;
import java.util.Optional;

public class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};

        Optional<Integer> sum = Arrays.stream(numbers)
                                      .reduce(0, Integer::sum);

        System.out.println(sum.isPresent()); // 출력: true
        System.out.println(sum.get()); // 출력: 15
    }
}

 

 

'개발공부 > JAVA' 카테고리의 다른 글

[JAVA] 예외(Exception)  (0) 2024.03.25
[JAVA] 수정할 수 없는 컬렉션  (0) 2024.03.21
[JAVA] Stack, Queue  (0) 2024.03.20
[JAVA] Map 컬렉션  (0) 2024.03.20
[JAVA] 제네릭(Generic)  (0) 2024.03.19