반응형
루핑(looping)은 요소 전체를 반복하는 것을 말한다.
Stream API에서 루핑에 해당하는 메소드로는 peek, forEach가 존재한다.
이 둘의 차이점은 peek()
은 중간 처리 메소드이고, forEach()
는 최종 처리 메소드라는 점이다.
기억해야할 점은, 중간 처리 메소드는 최종 처리 메소드가 실행되지 않으면 동작하지 않는다는 점이다. (예전 포스팅에도 적어놨음, 중간 처리 메소드는 최종 처리 메소드가 실행되기 전까지 지연(lazy) 됨)
따라서 peek()을 사용하고 최종 처리 메소드가 없으면 스트림은 동작하지 않게 된다.
public static void main(String[] args){
int[] intArr = {1, 2, 3, 4, 5};
// 최종처리 메소드가 없으면 동작하지 않음.
Arrays.stream(intArr)
.filter(a -> a%2 == 0)
.peek(System.out::println); // peek은 중간 처리 메소드(intermediate)
// 최종처리 메소드(Terminal) sum()이 존재하므로 정상 작동한다.
Arrays.stream(intArr)
.filter(a -> a%2 == 0)
.peek(System.out::println)
.sum();
// forEach는 최종처리 메소드(Terminal) 이므로 아래는 정상 동작한다.
Arrays.stream(intArr)
.filter(a -> a%2 == 0)
.forEach(System.out::println);
}
반응형
'프로그래밍 노트 > JAVA' 카테고리의 다른 글
[JAVA] Stream 커스텀 집계 (0) | 2019.06.30 |
---|---|
[JAVA] Stream 기본집계 (0) | 2019.06.30 |
[JAVA] Stream 정렬(sorted()) (0) | 2019.06.17 |
[JAVA] Stream 매핑(flatMapXXX(), mapXXX(), asXXXStream(), boxed()) (0) | 2019.06.17 |
[JAVA] Stream의 필터링(distinct(), filter()) (0) | 2019.06.17 |