1、首先談談什麼是流?
流是從支持數據處理操作的源中生成的元素序列。
拆分理解這句話:
- 元素序列:流提供了一個接口,可以訪問特定元素類型的一組有序值;
- 源:被處理的數據,從有序集合生成流時會保留原有的順序;由列表生成的流,其元素順序和列表一致;
- 數據處理操作:與數據庫操作類似,流操作可以順序執行,也可以並行執行;
- 流水線:很多流操作本身會返回一個流,這樣多個操作就可以鏈接起來,形成一條大的流水線;
- 內部迭代:與使用迭代器顯示迭代的集合不同,流的迭代操作是在背後進行的;
流有什麼好處?或者我們爲什麼要使用流?
流允許你以使用聲明性的方式處理數據集合,而不是臨時編寫一個實現。具體好處如下:
- 聲明性 - 更簡潔、易讀;
- 可複合 - 更靈活;
- 可並行 - 性能更好;
2、流與集合對比
- 集合是一個內存中的數據結構,包含數據結構中目前所有的值;
- 而流是概念上固定的數據結構,其元素是按需加載的;
- 流只能被遍歷一次,遍歷完之後就被消費掉了;
- 遍歷數據的方式也是他們一個關鍵區別:
- Collection 需要用戶去編碼迭代,這稱爲外部迭代;
- Streams 庫使用內部迭代,不需要去編碼,它內部幫忙把這些事情做了;
- 集合主要是訪問數據,而流的目的在於數據計算。
3、流操作、使用流
流主要兩種類別的操作:中間操作,終端操作。
中間操作形成流水線、而終端操作則是從流水線中生成結果。
使用流則包含三個要素:
- 數據源;
- 中間操作鏈;
- 終端操作;