JavaDocs
에 따르면 Stream 중간 연산(intermediate)
중, java.util.Stream.peek()
에는 이런 내용이 있습니다.
“java.util.Stream.peek()
은 디버깅을 지원하기 위해 존재합니다”
다른 Stream 중간 연산(intermediate)
과는 다르게 peek()
은 최적화되는 과정에서 실행하지 않고 넘어갈 수도 있다는 의미입니다.
즉, peek()
은 Stream 에서 얘기치 않은 동작을 만들 수 있습니다.
어떤 element 만 실행된다거나, 아니면 아예 실행되지 않는다거나 같이요.
따라서 peek()을 무분별하게 사용하면 오류가 발생하기 쉬운 코드가 될 수 있습니다.
이 규칙은 peek()을 실제로 프로덕션 디버깅/로깅 목적을 위해서만 사용하는 것인지 확인하기 위해, 매번 문제가 있다고 알려줍니다.
규칙을 어긴 코드
Stream.of("one", "two", "three", "four")
.filter(e -> e.length() > 3)
.peek(e -> System.out.println("Filtered value: " + e)); // 규칙을 어긴 코드
규칙을 준수한 해결책
Stream.of("one", "two", "three", "four")
.filter(e -> e.length() > 3)
.foreach(e -> System.out.println("Filtered value: " + e));
같이보면 좋은 자료
- Java 8 API Documentation
- 4comprehension: Idiomatic Peeking with Java Stream API
- Data Geekery: 10 Subtle Mistakes When Using the Streams API
If you like SONARKUBE, don’t forget to give me a star.