包結構如下所示:
這個包的結構很簡單,類型也不多。
BaseStream接口
所有Stream接口類型的父接口,它繼承自AutoClosable接口,定義了一些所有Stream都具備的行為。
因為繼承自AutoClosable接口,是以所有的Stream類型都可以用在Java
7中引入的try-with-resource機制中,以達到自動關閉資源的目的。實際上,隻有當Stream是通過Socket,Files
IO等方式建立的時候,才需要關閉它。對于來自于Collections,Arrays的Stream,是不需要關閉的。
Stream接口
定義了衆多Stream應該具有的行為。
最典型的比如filter方法族,map方法族以及reduce方法族,這三個方法是FunctionalProgramming的标志。典型的Map-Filter-Reduce模式便是依靠這三個操作來定義的。
與此同時,Stream接口還定義了一些用于建立Stream的static方法,建立的Stream可以是有限的,也可以是無限的。有限的很好了解,而無限Stream是一個新概念,通過generate方法或者iterate方法實作。
IntStream, LongStream
以及 DoubleStream
接口
基于原生類型int, long以及double的Stream。提供了衆多類型相關的操作。
典型的例如,sum方法,min/max方法,average方法等。這些方法都是Reduce操作的具體實作。
Collect接口
對于Reduce操作的抽象。此接口中定義了常用的Reduce操作。
其中定義的Reduce操作可以通過串行或者并行的方式進行實作。BaseStream接口中的parallel,sequential,unordered方法提供的高層API使并發程式設計變得非常簡潔。
畢竟,Map-Filter-Reduce模式的靈魂就在于并行計算。
Collectors類
提供了衆多可以直接使用的Reduce操作。
典型的比如groupingBy以及partitioningBy操作。它們都可以通過串行或者并行的方式進行實作。比如,groupingByConcurrent會使用并行的方式進行grouping操作。
StreamSupport類
提供了底層的一些用于操作Stream的方法,如果不需要建立自己的Stream,一般不需要使用它。