반응형
스트림 API를 사용할 때 데이터 흐름을 중간에 확인하거나
최종 결과를 출력하고 싶을 때 사용할 수 있는 메서드들이 있습니다.
이번 예제에서는 peek()과 forEach()의 차이를 실습해보며,
중간 연산과 최종 연산의 개념을 함께 정리해보겠습니다.
📌 예제 코드
import java.util.Arrays;
public class LoopingExample {
public static void main(String[] args) {
int intArr[] = { 1, 2, 3, 4, 5 };
// peek() 단독 사용 → 출력되지 않음 (최종 연산이 없음)
Arrays.stream(intArr)
.filter(a -> a % 2 == 0)
.peek(System.out::println); // 실행 안 됨
// peek() + sum() → 중간 연산이 실제로 실행됨
int total = Arrays.stream(intArr)
.filter(a -> a % 2 == 0)
.peek(System.out::println) // 중간 출력 (짝수만)
.sum();
System.out.println("총합 : " + total + "\n");
// forEach()는 최종 연산으로 직접 실행됨
Arrays.stream(intArr)
.filter(a -> a % 2 == 0)
.forEach(System.out::println);
}
}
💻 실행 결과
2
4
총합 : 6
2
4
💬 코드 설명
- peek()는 중간 연산으로, 다음 최종 연산이 실행되기 전까지는 동작하지 않습니다.
- 첫 번째 peek()는 최종 연산이 없어 실제 출력되지 않습니다.
- 두 번째 peek()는 sum()이라는 최종 연산과 함께 사용되어
실제로 짝수 요소가 출력됩니다. - forEach()는 최종 연산으로, 직접 요소를 소비하며 바로 실행됩니다.
💡 포인트 정리
- peek()는 중간 상태를 확인하는 용도이며, 디버깅이나 로그 출력에 적합합니다.
- peek() 단독으로는 실행되지 않고, 최종 연산(sum, collect, forEach 등)이 있어야 작동합니다.
- forEach()는 스트림을 종료시키는 최종 연산입니다.
- 중간 연산은 지연(lazy) 실행, 최종 연산은 즉시 실행(eager)됩니다.
📌정리하자면, 이번 예제에서는 peek()를 사용해 중간 연산 흐름을 살펴보고,
forEach()를 통해 최종 결과를 출력하는 구조를 비교해보았습니다.
스트림의 중간 처리 과정이 궁금할 때는 peek()를 활용하고,
출력 자체가 목적이라면 forEach()를 사용하는 것이 적절합니다.
'Java > 자바 정리' 카테고리의 다른 글
177. Optional로 평균 처리하기 – isPresent, orElse, ifPresent 활용 (0) | 2025.05.26 |
---|---|
176. 스트림 집계(Aggregate) 연산 – count, sum, average, max, min, findFirst (0) | 2025.05.26 |
175. 스트림 요소 조건 검사 – allMatch, anyMatch, noneMatch (0) | 2025.05.26 |
173. sorted()에 직접 비교식 넣기 – 사용자 지정 정렬 구현하기 (0) | 2025.05.26 |
172. 정렬 스트림 – sorted()와 reverseOrder()로 객체 정렬하기 (0) | 2025.05.26 |
171. flatMap()과 flatMapToInt() – 다차원 데이터를 평면화하기 (0) | 2025.05.26 |