Java Stream API
(original reference : http://www.oracle.com/technetwork/articles/java/ma14-java-se-8-streams-2177646.html\)
- ref.http://www.oracle.com/technetwork/articles/java/ma14-java-se-8-streams-2177646.html
Java Stream API?
Java Stream API는 Java SE 8 부터 지원하는 데이터 처리에 대한 API
Stream API는 데이터의 연산과 관련이 있는 API
데이터에 대해 내부반복을 진행하며, 개발자가 명시한 연산을 내부적으로 저장 한 뒤 결과를 돌려준다
- 컬렉션의 경우, 데이터 자체에 대해 초점을 맞추고 있으며, 컬렉션은 단순히 저장된 데이터를 표현한다. 따라서 컬렉션데이터의 연산의 경우 반복루프와 같은 연산을 별도로 지정해야 한다[외부반복]
Stream API 시작하기
Stream 흐름의 순서
Source -> Stream -> Filter [Prediction] -> Sort [Comparator] -> Map [Function] -> Collect
sample
List transactionsIds = transactions.stream() // Start Stream .filter(t -> t.getType() == Transaction.GROCERY) // Lambda expresstion <filtering> .sorted(Comparator.comparing(Transaction::getValue).reversed()) //sorting .map(Transaction::getId) // what to do .collect(Collectors.toList()); // return value after steam
상세설명
stream() -> 집계연산을 지원하는 요소의 순서
stream은 큰 파이프라인이라고 보면 쉽다. stream api 들은 stream 형을 반환한다. 즉, 일련의 stream data들은 체인처럼 연결된 stream 연산들을 일련적으로 수행 뒤 결과값을 반환한다.
위 sample 을 그림으로 표현하면 아래와 같다.
Stream()이 선언되고 난 뒤, filter()를 통해 stream 내 대상 데이터를 고르며, sorted()를 통해 filter된 데이터를 정렬한다. 정렬 후 map()을 통해 stream 데이터를 처리한다. 처리 후 collect를 통해 명시된 collection으로 반환한다. 모든 관계는[collect제외] stream을 리턴으로 반환하며, 반환된 stream 덕분에 체인처럼 파이프라인과 같이 stream 데이터를 한 흐름에 태울 수 있다.