// forEach() 메서드의 선언부
void forEach(Consumer<? super T> action)
스트림의 요소에 대해서 조건을 검사하는 메서드는 대표적으로 세개가 있다
// 조건검사 메서드들의 선언부
boolean allMatch (Predicate<? super T> predicate)
boolean anyMatch (Predicate<? super T> predicate)
boolean noneMatch (Predicate<? super T> predicate)
// 사용 예제 : 총점이 낙제점(총점 100이하)인 학생 확인하기
boolean noFailed = stuStream.anyMatch(s -> s.getTotalScore() <= 100)
다른 종류로, 스트림의 요소 중 조건에 일치하는 첫번 째 것을 반환하는 메서드도 있다.
// findFirst() 사용 예제
Optional<Student> stu = stuStream.filter(s -> s.getTotalScore() <= 100).findFirst();
// findAny() 사용 예제
Optional<Student> stu = parallelStream.filter(s -> s.getTotalScore() <= 100).findAny();
💡 findAny( )와 findFirst( )의 반환 타입은 Optional<T> 이다
// 일반 스트림의 통계 메서드 선언
long count()
Optional<T> max(Comparator<? super T> comparator)
Optional<T> min(Comparator<? super T> comparator)
// reduce() 메서드 선언
Optional<T> reduce(BinaryOperator<T> accumaulator)
💡 연산결과의 초기값(identity)를 갖는 reduce( )도 있다.
// 초기값을 갖는 reduce() 메서드 선언
T reduce(T identity, BinaryOperator<T> accumulator)
U reduce(U identity, BiFunction<U,T,U> accumulator, BinaryOperator<U> combiner)
💡 최종 연산 중 count( )와 sum( ) 등은 내부적으로 모두 reduce( )를 사용하여 작성되었다.
// count , sum , max, min을 reduce( )로 작성한 예제
// count
int count = intStream.reduce(0, (a,b) -> a + 1);
// sum
int sum = intStream.reduce(0, (a,b) -> a + b);
// max
int max = intStream.reduce(Integer.MIN_VALUE, (a,b) -> a>b ? a:b);
// min
int min = intStream.reduce(Integer.MAX_VALUE), (a,b) -> a<b ? a:b);