자바의 컬렉션 프레임워크에는 Collection 패키지에 List, Set 그리고, Map 패키지에 HaspMap, HashTable 등 수많은 클래스들이 존재한다. 그리고 이 클래스들을 다루는 방법이 제각각 다르다. 데이터를 추가하거나 삭제하거나 하는 일련의 작업들은 제각각의 클래스에서 정의한 방법들을 알고 있어야 한다. 이렇게 제각각 다양한 데이터 소스를 표준화된 방법으로 다루기 위한 방법으로 자바 1.8부터 스트림이 도입되었다.
사실 스트림 프로그래밍의 원조는 ReactiveX 이다. 여기서 RxJava, RxJs, RxSwift 등 다양한 언어별 스트림이 파생되었다. 자바에서는 스트림 프로그래밍을 하기 위해서는 1.8 이전에는 RxJava 라이브러리를 사용하였으나 1.8부터는 이제 표준화된 해당 스트림을 사용하게 되었다.
스트림을 가지고 작업하는 순서는 첫번째 스트림 생성, 두번째 중간 작업, 세번째 최종 연산이다.