Reducint


title: 2025-08-23 author: 강병호 date: 2025-08-23 category: TIL/강병호/2025/08 layout: post —

5. 리듀싱

스트림 요소를 조합해 더 복잡한 질의를 표현하기 위한 것으로 모든 스트림 요소를 처리해서 값으로 도출하는 연산이다. 이를 함수형 프로그래밍 언어 용어로 fold라고도 부른다.

요소의 합

다음 코드처럼 reduce를 이용해 요소의 합을 구할 수 있다.

```
// for-each loop 이용
int sum = 0;
for (int x : numbers) {
	sum += x;
}
// reduce 이용
int sum = numbes.stream().reduce(0, (a, b) -> a + b);
```

위와 같이 reduce를 이용해 반복된 패턴을 추상화하여 처리할 수 있다.

reduce 의 인수는 다음과 같다.

  • 초깃값 : 0
  • 두 요소를 조합해 새로운 값을 만드는 BinaryOperator<T>

최댓값과 최솟값

reduce를 활용해 최대, 최소 값을 찾을 수 있다.

```
Optional<Integer> max = numbers.stream().reduce(Integer::max);
Optional<Integer> min = numbers.stream().reduce(Integer::min);
```

[!reduce 메서드의 장점과 병렬화] > 기존의 단계적 반복으로 합계를 구하는 것과 다르게 reduce를 이용하면 내부 반복이 추상화되면서 내부 구현에서 병렬로 reduce를 실행할 수 있게 된다. > 예를 들어, 반복적인 합계에서는 sum변수를 공유해야 하기에 쉽게 병렬화하기 어렵다. 강제적으로 동기화시켜도 스레드간의 소모적인 경쟁으로 인해 그 이득은 상쇄된다.

results matching ""

    No results matching ""