List, Map, Set, Array 들과는 달리 내부적인 저장소가 없다. 주로 사용하는 Collections 들은 내부적으로 저장소가 있다. 심지어 String마저도 내부적으로는 char[] 를 가지고 있다. 대부분의 자료구조들이 자체적으로 값을 가지고 있는것에 반해 Stream은 저장소를 별도로 가지고 있지 않다. List < String > l = new ArrayList ( Arrays . asList ( "one" , "two" ) ) ; Stream < String > sl = l . stream ( ) ; l . add ( "three" ) ; String s = sl . collect ( joining ( " " ) ) ; System . out . println ( s ) ; 위코드의 출력값은 “one two three” 이다. 계속 참조하고 있다라고 이해하는게 차라리 받아들이기 쉬울 것 같다. pipeline Stream에서 호출하는 함수들은 대부분 pipeline 인터페이스에 정의되어있다. 파이프라인에서 사용되는 함수들은 크게 2가지다. 중개함수, 종료함수 - 중개함수 : filter(), map(), sorted() .. - 종료함수 : sum(), max() .. 중개함수는 Stream을 구성하는 엘리먼트들이 서로 연관성이 있느냐에 따라 stateless, stateful로 나뉜다. - stateless : filter(), map()... - stateful : sorted().. 이렇게 나누는 또 다른 이유는 Stream을 병렬로 실행했을때 안정성을 확보할 수 있느냐 없느냐의 차이일 수도 있다. 종료함수들은 내부적으로 reduce()를 호출하는데, reduce()함수 호출시 Stream이 재사용할 수 없도록 St...