이 글의 코드 및 정보들은 책 내용을 토대로 작성하였습니다.
Prologue
-
Java 8에서는 stream 기능을 제공해준다.
굉장히 좋은 기능이지만
Debug를 하는데 있어서는 다소 불편한 점이 있다.
그래서 stream을 Debug 하는 방법에 대해 알아보자.
peek( )
Normal Usage
public void printEven() {
List<Integer> numbers = Arrays.asList(2, 3, 4, 5);
numbers.stream()
.map(x -> x + 17)
.filter(x -> x % 2 == 0)
.limit(3)
.forEach(System.out::println);
}
Output
20
22
-
중간 결괏값을 확인할 수 없고
단순히 결괏값만 확인할 수 있어서 불편함이 있다.
For Debug
public void printEvenWithDebug() {
List<Integer> numbers = Arrays.asList(2, 3, 4, 5);
numbers.stream()
.peek(x -> System.out.println("\nStart Debug"))
.peek(x -> System.out.println("from stream : " + x))
.map(x -> x + 17)
.peek(x -> System.out.println("after stream : " + x))
.filter(x -> x % 2 == 0)
.peek(x -> System.out.println("after filter : " + x))
.limit(3)
.peek(x -> System.out.println("after limit : " + x))
.forEach(System.out::println);
}
Output
Start Debug
from stream : 2
after stream : 19
Start Debug
from stream : 3
after stream : 20
after filter : 20
after limit : 20
20
Start Debug
from stream : 4
after stream : 21
Start Debug
from stream : 5
after stream : 22
after filter : 22
after limit : 22
22
-
peek( ) 메소드를 사용하여
가시적으로 값을 확인해볼 수 있었다.
Summary
-
이제는 stream 기능을 사용하더라도
peek( )를 사용하여
중간마다 값이 어떻게 변하는지 확인할 수 있게 되었다.
-
위 코드는 Gist에 첨부해놓았다.