자바

자바 스트림 Java Stream => 루핑 (peek(), forEach()) / 매칭( allMatch(), anyMatch(), noneMatch() )

알통몬_ 2017. 3. 31. 20:19
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 


요소 전체를 반복하는 것을 루핑이라고 합니다.

메소드로는 peek() 와 forEach()가 있는데

위 두 메소드는 기능은 같지만 동작 방식이 다릅니다.


peek() 는 중간 처리 단계에서 전체 요소를 루핑하고, 추가적 작업을 위해 사용하며,

최종 처리 메소드가 호출돼야만 동작합니다.

예) 필터링 후에 어떤 요소가 남았는지 확인할 때 사용 때

intStream

    .filter( a -> a % 3 ==0 )

    .peek(a -> System.out.println( a) )

    .sum();

peek() 메소드가 가장 마지막에 호출된다면 해당 스트림은 동작하지 않습니다.



forEach() 는 최종 처리 메소드로써 파이프 라인 마지막에 루핑하며 요소를 하나씩 처리합니다.

최종 처리 메소드이므로 forEach() 뒤에 sum() 같은 최종 처리 메소드가 호출되면 안됩니다.


예제)



매칭

스트림 클래스에 최종 처리 단계에서 요소들이 특정한 조건을 만족하는지를

조사할 수 있도록 제공한 메소드를 매칭 메소드라고 합니다.


allMatch()

=>  모든 요소들이 매개값으로 주어진 Predicate의 조건을 만족하는지 검사합니다.


anyMatch()

=> 최소 한 개의 요소가 매개값으로 주어진 Predicate의 조건을 만족하는지 조사합니다.


noneMatch()

=> 모든 요소들이 매개값으로 주어진 Predicate의 조건을 만족하지 않는지 검사합니다.


위 세 메소드의 리턴타입은 전부 boolean입니다

제공 인터페이스는 Stream, IntStream, LongStream, DoubleStream 네 가지가 있고

매개 변수로는 Predicate<T>, IntPredicate, LongPredicate, DoublePredicate가 올 수 있습니다.


예제)


이상입니다.

반응형