天天看點

[Java 8 Lambda] java.util.stream 簡介

包結構如下所示:

[Java 8 Lambda] java.util.stream 簡介

這個包的結構很簡單,類型也不多。

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,一般不需要使用它。