java / / 2023. 1. 26. 11:32

Java Stream peek 기능

Java Stream peek 기능

Java stream peek은 stream을 사용할 때 디버깅을 할 때 유용하게 사용할 수 있는 기능이다.
하지만 peek은 중간 연산에서는 동작하지 않고 최종 연산이 있는 경우에만 동작한다.

아래 예를 보자.

public void peekNoWorkingTest() {
  List<String> numbers = Arrays.asList("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten");
  numbers.stream()
    .filter(s -> s.length() > 3)
    .peek(System.out::println); // print nothing
}

위의 예에서 아무것도 출력되지 않는다.

하지만 아래와 같이 최종 연산으로 collect를 하면 결과가 출력된다.

public void peekTest() {
  List<String> numbers = Arrays.asList("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten");
  numbers.stream()
    .filter(s -> s.length() > 3)
    .peek(System.out::println)
    .collect(Collectors.toList());
}

// 출력
three
four
five
seven
eight
nine

javadoc 문서에 따르면 peek은 파이프라인의 특정 시점의 요소를 확인하고 싶은 경우와 같이 디버깅을 지원하기 위해 존재한다고 한다.

사용법은 아래와 같다.

public void peekDebuggingTest() {
  List<String> numbers = Arrays.asList("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten");
  numbers.stream()
    .filter(s -> s.length() > 3)
    .peek(e -> System.out.println("filter value: " + e))
    .map(String::toUpperCase)
    .peek(e -> System.out.println("map value: " + e))
    .collect(Collectors.toList());
}

// 출력
filter value: three
map value: THREE
filter value: four
map value: FOUR
filter value: five
map value: FIVE
filter value: seven
map value: SEVEN
filter value: eight
map value: EIGHT
filter value: nine
map value: NINE



반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유