boolean allMatch (Predicate <? super T>predicate)// 모든요소가 만족 =true
boolean anyMatch (Predicate <? super T>predicate)//한 요소라도
boolean noneMatch (Predicate <? super T>predicate)// 모든요소가 만족 x=true
ex)
boolean noFailed= stuStream.anyMatch(s->s.getTotalScore<=100)
Optional<Student> stu = stuStream.filter(s->s.getTotalScore).findFirst();
Optional<Student> stu = parallelStream.filter(s->s.getTotalScore).findAny();
스트림의 요소를 줄여가면서 연산을 수행하고 최종결과를 반환한다.
스트림의 최종연산은 reduce에서 만들어 졌다.
1.Optional<T.> reduce(BinaryOperator<T.> accumulator)
// 스트림이 비어있을수도 있으니 optional, / 초기값 없다
2.T reduce(T identity, BinaryOperator<T.>accumulator)
// 스트림이 비어도 초기값 T반환 , /초기값 있다
3.reduce(초기값, 수행할연산)
int count =intStream.reduce(0,(a,b)->a+1); //count()
int sum = intStream.reduce(0,(a,b)->a+b) l //sum()
int max = intStream.reduce(Integer.MIN_VALUE,(a,b)->?a:b) //max()
int min =intStream.reduce(Integer.MAX_VALUE,(a,b)->a<b?a:b) //min()
reduce() 가 내부적으로 어떻게 동작하는지 파헤쳐보자 . reduce()로 스트림의 모든 요소를 다더하는 과정 이다
1.int a = identity; //초기값을 a에저장
2.for(int b :stream) //모든 요소의 값을 a에 누적한다
a=a+b;
collect() = 스트림의 최종연산, 매개변수로 컬렉터를 필요로한다
Collector = 인터페이스, 컬렉터는 이 인터페이스를 구현해야한다
Collectors = 클래스 , static메서드로 미리 작성된 컬렉터를 제공한다
toList(),/ toSet(),/ toMap(), /toCollection(), /toArray()
스트림의 요소를 컬렉션에 수집하려면 toList()와 같은 메서드 사용. list나 set이아닌 특정 컬렉션 지정하려면 toCollection()에 해당 컬렉션의 생성자 참조를 매개변수로 넣어주면 된다
ex)
ArrayList<String.> list= names.stream()
.collect(Colectors.toCollection(ArrayList::new)); //특정 컬렉션에 넣기
Map<String,Perosn> map = personStream
.collect(Collectors.toMap(p->p.getId(), p->p));
Student[] stuNames = studentStream.toArray(Student[]::new)
->toArray는 반환타입이 Objectp[]
counting() /summingInt() / averagingInt()/maxBy()/minBy()
일반 스트림과는 전체/그룹별 로 계산한다는 차이가 있다.
사용법은 위에 예시들처럼
스트림.collect(Collectors.메서드(람다))이다.
joining()
문자열 스트림의 모든 요소를 하나의 문자열로 연결해서 반환한다.
스트림의 요소가 문자열이 아닌경우에는 먼저 map() 로 문자열로 변환한뒤 사용한다.
ex
String studentNames= stuStream.map(Student::getName)
.collect(Collectors.joining());