forEach()
forEachOrdered()
void forEach(Consumer<? super T> action)
// 병렬 스트림인 경우 순서가 보장되지 않음
void forEachOrdered(Consumer<? super T> action)
// 병렬 스트림인 경우에도 순서가 보장됨
forEach()
forEachOrdered()
IntStream.range(1,10).sequential().forEach(System.out::print);
//123456789
IntStream.range(1,10).sequential().forEachOrdered(System.out::print);
//123456789
sequential()
- 직렬 스트림IntStream.range(1,10).parallel().forEach(System.out::print);
//683295714 // 순서 보장 ❌
IntStream.range(1,10).parallel().forEachOrdered(System.out::print);
//123456789 // 순서 보장 ✅
parallel()
- 병렬 스트림allMatch()
anyMatch()
noneMatch()
boolean allMatch (Predicate<? super T> predicate)
// 모든 요소가 조건을 만족시키면 true
boolean anyMatch (Predicate<? super T> predicate)
// 한 요소라도 조건을 만족시키면 true
boolean noneMatch (Predicate<? super T> predicate)
// 모든 요소가 조건을 만족시키지 않으면 true
boolean hasFailedStu = stuStream.anyMatch(s-> s.getTotalScore()<=100);
// 100 이하가 있는지
findFirst()
findAny()
Optional<T> findFirst()
Optional<T> findAny()
Optional<Student> result = stuStream.filter(s->s.getTotalScore() <= 100).findFirst();
Optional<Student> result = parallelStream.filter(s->s.getTotalScore() <= 100).findAny();
filter()
와 같이 사용reduce()
⭐reduce()
💡 accumulate : 누적하다
// int reduce(int identity, IntBinaryOperator op)
int count = intStream.reduce(0, (a,b) -> a + 1); // count()
int sum = intStream.reduce(0, (a,b) -> a + b); // sum()
int max = intStream.reduce(Integer.MIN_VALUE, (a,b)-> a > b ? a : b);
// max()
int min = intStream.reduce(Integer.MAX_VALUE, (a,b)-> a < b ? a : b);
// min
reduce()
내부 구조int sum = intStream.reduce(0, (a,b) -> a + b)
// -----> reduce() 내부 구조
int a = identity; // 0
for(int b : stream)
a = a + b; // sum() // accumulator