1. 스트림의 연산(중간연산과 최종연산)에 어떤것들이 있을까?
- 중간연산 - 연산결과가 스트림인 연산. 0~N번 반복적으로 적용 가능하다.
- 최종연산 - 연산결과가 스트림이 아닌연산으로 단 한번만 적용 가능하다. 스트림의 요소를 소모한다.
예제로 설명해보자면 아래와 같다.
stream.distinct().limit(5).sorted().forEach(System.out::print);
// ----------중간연산----------- -----최종연산 스트림 소모------
- distinct() 중복제거
- limit(5) 5개 자르기
- sorted() 정렬
그럼 스트림의 중간연산에 대해 알아보자!
중간연산 | 설명 |
Stream<T> distinct() | 중복을 제거 |
Stream<T> filter(Predicate<T> predicate) | 조건에 안맞는 요소 제외 |
Stream<T> limit(long maxSize) | 스트림의 일부를 잘라낸다. |
Stream<T> skip(long n) | 스트림의 일부를 건너뛴다. |
Stream<T> peek(Consumer<T> action) | 스트림의 요소에 작업수행 작업 중간에 요소를 확인할 때 사용 |
Stream<T> sorted() Stream<T> sorted(Comparator<T> comparator) | 스트림의 요소를 정렬한다. comparator : 정렬기준 |
Stream 중간연산의 핵심! Stream<R> map(Function<T, R> mapper) IntStream mapToInt(ToIntFunction<T> mapper) LongStream mapToLong(ToLongFunction<T> mapper) DoubleStream mapToDouble(ToDoubleFunction<T> mapper) Stream<R> flatMap(Function<T, Stream<R>> mapper) IntStream flatMapToInt(Function<T, IntStream> m) LongStream flatMapToLong(Function<T, LongStream> m) DoubleStream flatMapToDouble(Function<T, LongStream> m) |
스트림의 요소를 변환한다. |
스트림의 최종연산에 대해 알아보자
최종연산 | 설명 |
void forEach(Consumre<? super T> action) void forEachOrdered(Consumer<? super T> action) |
각 요소에 지정된 작업 수행 forEachOrdered은 병렬스트림으로 처리할 경우 작업의 순서를 유지하기위해 사용한다. |
long count() | 스트림의 요소의 개수 반환 |
Optional<T> max(Comparator<? super T> comparator) Optional<T> min(Comparator<? super T> comparator) |
스트림의 최대값/최소값을 반환 Comparator은 정렬기준이다. |
Optional<T> findAny() //아무거나 하나 Optional<T> findFirst() //첫 번째 요소 |
스트림의 요소 하나를 반환 findAny는 filter()와 함께 사용된다 |
Boolean allMatch(Predicate<T> p) // 모두 만족하는지 Boolean anyMatch(Predicate<T> p) //하나라도 만족하는지 Boolean noneMath(Predicate<T> p) // 모두 만족 안하는지 |
주어진 조건을 모든 요소가 만족 시키는지, 만족시키지 않는지 |
Object[] toArray() A[] toArray(IntFunction<A[]> generator) |
스트림의 모든 요소를 배열로 반환 |
Stream 최종연산의 핵심! Optional<T> reduce(BinaryOperator<T> accumulator) T reduce(T identity, BinaryOperator<T> accumulator) U reduce(U identity, BiFunction<U, T, U> accumulator, BinaryOperator<U> combiner) |
스트림의 요소를 하나씩 줄여가면서(reduce) 계산한다. |
R collect(Collector<T, A, R> collector) R collect(Supplier<R> supplier, BiConsumer<R, T> accoumulator, BiCunsumer<R, R> combiner) |
스트림의 요소를 수집한다. 주로 요소를 그룹화 하거나 분할한 결과를 컬렉션에 담아 반환하는데 사용된다. |
- Optinal<T>은 래퍼클래스로써, T 타입의 값을 하나 감싸고 있는 클래쓰로써, 작업결과를 T객체에 담아서 준다.
사용법은 다음시간에 자세히 알아보도록 하겠습니다@@!
참조)
[자바의 정석 - 기초편] ch14-23~25 스트림의 연산
https://www.youtube.com/watch?v=iY8ta9upajE