使用java 8新增Stream操做集合

Java8新增了Steam、IntStream、LongStream、DoubleStream,同時提供了對應的Builder,例如Stream.Builder、IntSteam.Builder、LongStream.Builder、DoubleStream.Builer數組

獨立使用Stream的步驟:app

  1. 使用Stream或XxxStreamAPI的builder()類方法建立該Stream對應的Builder
  2. 重複使用Builder的add()方法向該流中添加多個元素
  3. 調用Builder的build()方法獲取對應的Stream
  4. 調用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():返回流中的任意一個元素.
相關文章
相關標籤/搜索