Java8新增了Steam、IntStream、LongStream、DoubleStream,同時提供了對應的Builder,例如Stream.Builder、IntSteam.Builder、LongStream.Builder、DoubleStream.Builer數組
獨立使用Stream的步驟:app
- 使用Stream或XxxStreamAPI的builder()類方法建立該Stream對應的Builder
- 重複使用Builder的add()方法向該流中添加多個元素
- 調用Builder的build()方法獲取對應的Stream
- 調用Stream的彙集方法
Stream提供了大量的方法進行彙集操做,這些方法既能夠是中間的,也能夠是末端的ui
中間方法:中間方法容許流保持打開的狀態,並容許直接調用後續的方法,中間方法的返回值是另一個流。調試
末端方法:末端方法是對流的最終的操做。當某個流執行末端方法後,改流將會消耗且再也不可用排序
Stream經常使用的中間方法:it
- filter(Predicate predicate):過濾Steam中全部不符合predicate的元素。
- mapToXxx(ToXxxFunction mapper):使用ToXxxFunction對流中的元素執行一對一的轉換,該方法返回的新流包含了ToXxxFunction轉換後的全部的元素。
- peek(Consumer action): 以次對每一個元素執行一些操做,該方法返回流與原有流包含相同的元素。該方法主要用於調試。
- distinct():該方法用於排序流中全部的重複的元素(判斷元素重複的標準是使用equal()方法返回true)。這是一個有狀態的方法。
- sorted():該方法用於保證流中的元素在後續的訪問中處於有序的狀態。這是一個有狀態的方法。
- limit(long maxSize):該方法用於保證流中的後續訪問中最大的容許訪問元素的個數。這是一個有狀態的、短路的方法。
經常使用的末端方法:io
- forEach(Consumer action):遍歷流中的全部元素,對每一個元素執行action。
- toArray():將流中的全部的元素轉換爲一個數組。
- reduce():該方法有三個重載的版本,都是用於經過某種操做來合併流中的元素
- min():返回流中全部元素的最小值
- max():返回六中全部元素的最大值
- count():返回流中全部元素的個數.
- anyMatch(Predicate predicate) :判斷流中是否至少包含一個元素符合Predicate條件
- allMatch(Predicate predicate): 判斷流中是否每一個元素都符合Predicate條件
- noneMatch(Predicate predicate):判斷流中是否全部元素都不符合Predicate條件
- findFirst():返回流中的第一個元素.
- findAny():返回流中的任意一個元素.