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.