Stream 로깅 처리하기

반응형
728x90
반응형

forEach

List<Integer> numbers = Arrays.asList(2, 3, 5, 6);

numbers.stream()
      .map(x -> x + 3)
      .filter(x -> x % 2 == 0)
      .limit(3)
      .forEach(System.out::println); /* 디버깅 x 결과 출력 */

 

스트림의 파이프라인 연산을 디버깅하자. forEach 로 스트림 결과를 출력하거나 로깅할 수 있다. 하지만 forEach를 호출하게되면, 호출 순간에 전체 스트림이 소비된다

 

 

peek

스트림 연산 peek 을 활용하자. 호출 순간 전체 스트림을 소비하는 forEach 에 비해 peek은 실제로 스트림의 요소를 소비하지는 않는다. peek 은 자신이 확인한 요소를 파이프라인의 다음 연산으로 그대로 전달하고, 각 동작 전후의 중간값을 출력한다.

 List<Integer> numbers = Arrays.asList(2, 3, 5, 6);
 
 List<Integer> result = numbers.stream()
     .peek(x -> System.out.println("from stream: " + x)) // 처음 소비한 요소를 출력
     .map(x -> x + 3)
     .peek(x -> System.out.println("after map: " + x)) // map 동작 실행 결과를 출력
     .filter(x -> x % 2 == 0)
     .peek(x -> System.out.println("after filter: " + x)) // filter 동작 실행 결과를 출력
     .limit(3)
     .peek(x -> System.out.println("after limit: " + x)) // limit 동작 실행 결과를 출력
     .collect(Collectors.toList());

 

 

반응형

Designed by JB FACTORY