본문 바로가기

JAVA

스트림8 최종연산 forEach()

최종연산 forEach()

스트림의 모든 요소에 지정된 작업을 수행 , forEach(), forEachOrdered()

void forEach(Consumer <? super T> action) //병렬스트림인 경우 순서가 보장되지 않음

void forEachOrdehead(Consumer <? super T> action) //병렬스트림인 경우 순서가 보장됨

 

sequential : 순차스트림

parallel: 병렬스트림

 

IntStream.range(1,10).sequential().forEach(system::println); //123456789

IntStream.range(1,10).sequential().forEachOrderhead(system::println); //123456789

 

IntStream.range(1,10).parallel().forEach(system::println); //7634~

IntStream.range(1,10).parallel().forEachOrderhead(system::println); //123456789

 

순서보정안되면 더 빠르다.

조건검사 allMatch() , anyMatch(), noneMatch()

boolean allMatch(predicate <? super T> predicate) //모든 요소가 조건을 만족시키면 true

boolean anyMatch(predicate <? super T> predicate) //하나의 요소라도 조건을 만족시키면 true

boolean noneMatch(predicate <? super T> predicate) //모든 요소가 조건을 만족시키지 않으면 true

 

ex. 

boolean hasFaileStu = str.stream.anyMatch(s -> s.getTotalScore(1<=100));

 

조건에 일치하는 요소 찾기 findFirst() , findAny()

Optional<T> findFirst() // 첫번째 요소를 반환 , 순차스트림 사용

Optional<T> findAny() //아무거나 하나를 반환 ,병렬 스트림 사용

 

ex. filter를 사용, 결과가 null일수 있음

Optional<student> result = strStream.filter(s -> s.getTotalScore() <= 100).findFirst();

Optional<student> result = paralleStream.filter(s -> s.getTotalScore() <= 100).findAny();