스트림 핵심
IntStream
반환타입 기본형 스트림은 인자가 숫자이기 때문에 -> 카운트 이외의 더하기 , 평균 구하기 등이 가능하다. (계산가능)Stream<T>
반환타입이 객체인 스트림은 → 인자의 타입이 뭔지 알수없으니 최종연산에 카운트밖에 못센다.Stream<String>
💡 다양한 데이터소스를(컬렉션, 배열) → 표준화된 방법으로 다루기 위한 것이다.
스트림은 데이터를 읽기만 할 뿐 변경하진 않는다.
컬렉션과 배열을 스트림으로 → 간편하게 처리하기 위함 (반복작업을)
중간 연산
: 연산결과가 스트림, 반복적으로 적용가능최종 연산
: 연산결과가 스트림이 아닌 연산, -> 스트림을 사용하기때문에 단 한번만 적용가능
💡 데이터소스(원본)로부터 → 데이터를 읽기만 할 뿐 변경하진 않는다.
- 원본을 건드리지 않는다, 변경없음
- 읽기만 한다.
💡 스트림은 일회용이다
- 한번쓰면 → 다시 스트림을 생성해서 사용해야한다
- 원본은 그대로있으니(변경안함) → 다시 만들어서 쓰면 된다.
💡최종연산 전까지 중간연산이 수행되지 않는다 → 지연연산, 지연로딩
💡 작업을 내부 반복으로 처리한다.
- 내부반복 = 반복문을 메서드의 내부에 숨겼다(코드 간결의 장점 때문에, 성능은 비효율)
💡 작업을 병렬로 처리 - 병렬스트림이다
- 멀티쓰레드로 처리한다는것
💡 기본형 스트림 ⇒ IntStream, LongStream, DoubleStream
- 오토박싱&언박싱의 비효율이 제거되었다 (Stream< Integer>대신 → IntStream 사용)
- 기본형 1 을 → new Integer(1) 이런식으로 오토박싱하고
나중에 언박싱해야하는 비효율이 사라졌다- 기본형 → 객체로 바꾸고 → 다시 기본형으로 바꿔줘야하는 번거로움