Stream 중간(Intermediate) 연산은 사용되지 않은 채 남겨져선 안됩니다.

 

스트림 연산에는 두 가지 유형이 있습니다. 다른 스트림을 반환하는 중간 연산(intermediate)과 스트림이 아닌 다른 값을 반환하는 터미널 연산(terminal)입니다. 중간 연산(intermediate)은 느립니다. 따라서 스트림은 터미널 연산(terminal)을 수행하지 않는 한 실제로 코드를 실행하지 않습니다. 결과적으로 중간 연산(intermediate)의 값이 터미널 연산(terminal)에 의해 사용되지 않으면, 아무런 가치가 없는 코드가 될 확률이 높으며, 이는 거의 확실한 에러 상황입니다.

규칙을 어긴 코드

widgets.stream().filter(b -> b.getColor() == RED); // 규칙을 어긴 코드

규칙을 준수한 해결책

int sum = widgets.stream()
  .filter(b -> b.getColor() == RED)
  .mapToInt(b -> b.getWeight())
  .sum();
Stream<Widget> pipeline = widgets.stream()
  .filter(b -> b.getColor() == GREEN)
  .mapToInt(b -> b.getWeight());
sum = pipeline.sum();

역자 참고

@Test
public void 이_코드는_아무런_값도_출력하지_않습니다() {
  LongStream pipeline = LongStream.of(1L, 2L, 3L, 4L)
    .filter(element -> element % 2 == 0)
    .map(element -> {
        System.out.println(element);
        return element;
    });
}

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

원문으로 바로가기

Star This Project