java8,你應該瞭解的新特性(Stream API篇)

SQL 技術 夢幻逝水 夢幻逝水 2017-09-16

java8,你應該瞭解的新特性(Stream API篇)

1、新特性簡介

(1)速度更快

(2)代碼更少(增加了新的語法Lambda表達式)

(3)強大的Stream API

(4)便於並行

(5)最大化減少了空指針異常Optional

其中最為核心的為 Lambda 表達式與Stream API

2、瞭解Stream API

Stream 是 Java8 中處理集合的關鍵抽象概念,它可以指定你希望對集合進行的操作,可以執行非常複雜的查找、過濾和映射數據等操作。使用Stream API 對集合數據進行操作,就類似於使用 SQL 執行的數據庫查詢。也可以使用 Stream API 來並行執行操作。簡而言之,Stream API 提供了一種高效且易於使用的處理數據的方式。

流 (Stream) 是數據渠道,用於操作數據源(集合、數組等)所生成的元素序列。

集合講的是數據,流講的是計算!

注意:

①Stream 自己不會存儲元素。

②Stream 不會改變源對象。相反,他們會返回一個持有結果的新Stream。

③Stream 操作是延遲執行的。這意味著他們會等到需要結果的時候才執行。

Stream的操作三個步驟:

(1)創建Stream,一個數據源(如:集合、數組),獲取一個流;(2)中間操作,一箇中間操作鏈,對數據源的數據進行處理;(3)終止操作,一個終止操作,執行中間操作鏈,併產生結果。1234

3、創建Stream。

(1)可以通過Collection系列集合提供的Stream() 順序流或 ParallelStream()並行流;(2)通過 Arrays 中的 stream() 獲取一個數組流;(3)通過 Stream 類中靜態方法 of();(4)創建無限流。

java8,你應該瞭解的新特性(Stream API篇)

4、中間操作

多個 中間操作可以連接起來形成一個 流水線,除非流水線上觸發終止操作,否則 中間操作不會執行任何的 處理!而在 終止操作時一次性全部處理,這種方式稱為“惰性求值”。

測試數據,其中實體類包含了各自的get、set方法,有參、無參構造函數,hashCode以及equals(後期測試需要)。

java8,你應該瞭解的新特性(Stream API篇)

java8,你應該瞭解的新特性(Stream API篇)

(1)篩選與切片 filter——接收 Lambda , 從流中排除某些元素。 limit——截斷流,使其元素不超過給定數量及當數量滿足條件時停止循環。 skip(n) —— 跳過元素,返回一個扔掉了前 n 個元素的流。若流中元素不足 n 個,則返回一個空流。與 limit(n) 互補 distinct——篩選,通過流所生成元素的 hashCode() 和 equals() 去除重複元素,因此需要實體類中有這兩個方法的實現。

java8,你應該瞭解的新特性(Stream API篇)

(2)映射①map——接收 Lambda , 將元素轉換成其他形式或提取信息。接收一個函數作為參數,該函數會被應用到每個元素上,並將其映射成一個新的元素。

java8,你應該瞭解的新特性(Stream API篇)

示例中:map會循環list中的每個元素,為每個元素調用toUpperCase()方法。②flatMap——接收一個函數作為參數,將流中的每個值都換成另一個流,然後把所有流連接成一個流。

java8,你應該瞭解的新特性(Stream API篇)

(3)排序 sorted()——自然排序。 sorted(Comparator com)——定製排序。

java8,你應該瞭解的新特性(Stream API篇)

5、終止操作

(1)查找與匹配 allMatch——檢查是否匹配所有元素 anyMatch——檢查是否至少匹配一個元素 noneMatch——檢查是否沒有匹配的元素 findFirst——返回第一個元素 findAny——返回當前流中的任意元素 count——返回流中元素的總個數 max——返回流中最大值 min——返回流中最小值

java8,你應該瞭解的新特性(Stream API篇)

java8,你應該瞭解的新特性(Stream API篇)

(2)歸約,reduce(T identity, BinaryOperator) / reduce(BinaryOperator) ——可以將流中元素反覆結合起來,得到一個值。

java8,你應該瞭解的新特性(Stream API篇)

示例1中,歸約會把0做為第一個x,list中的第一個元素(1)做為y,進行運算x+y,然後結果做為下一次的x,list中的第二個元素做為y,再次進行x+y運算,直至list循環完成。

(3)收集collect,將流轉換為其他形式。接收一個 Collector接口的實現(實現類為Collectors),用於給Stream中元素做彙總的方法。Collector 接口中方法的實現決定了如何對流執行收集操作(如收集到 List、Set、Map)。

java8,你應該瞭解的新特性(Stream API篇)

其他常用接口方法

java8,你應該瞭解的新特性(Stream API篇)

相關推薦

推薦中...