스트림 연산에는 두 가지 유형이 있습니다.
다른 스트림을 반환하는 중간 연산(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.