한번 소비된 Stream pipeline은 재사용해선 안됩니다

 

Stream 연산은 중간 연산(intermediate)터미널 연산(terminal)으로 나뉘며, 결합되어 Stream pipeline을 만듭니다. 터미널 연산(terminal)을 수행하면, 이미 스트림 파이프라인이 사용된 것으로 간주되어 다시 사용할 수 없습니다. 이러한 재사용은 예상치 못한 결과를 만들 수 있습니다.

규칙을 어긴 코드

Stream<Widget> pipeline = widgets.stream().filter(b -> b.getColor() == RED);
int sum1 = pipeline.sum();
int sum2 = pipeline.mapToInt(b -> b.getWeight()).sum(); // 규칙을 어긴 코드

역자 참고

실제로 런타임 에러가 발생합니다.

LongStream pipeline = LongStream.of(1L, 2L, 3L, 4L).filter(element -> element % 2 == 0);
long sum1 = pipeline.sum();
long sum2 = pipeline.sum(); // 런타임 에러: IllegalStateException: stream has already been operated upon or closed

If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project