Stream流是JDK8新增的成員,允許以聲明性方式處理數(shù)據(jù)集合,可以把Stream流看作是遍歷數(shù)據(jù)集合的一個(gè)高級(jí)迭代器。
代碼以聲明性方式書寫:說明想要完成什么,而不是說明如何完成一個(gè)操作。
可以把幾個(gè)基礎(chǔ)操作連接起來,來表達(dá)復(fù)雜的數(shù)據(jù)處理的流水線,同時(shí)保持代碼清晰可讀。
從支持?jǐn)?shù)據(jù)處理操作的源生成元素序列.數(shù)據(jù)源可以是集合,數(shù)組或IO資源。
從操作角度來看,流與集合是不同的. 流不存儲(chǔ)數(shù)據(jù)值; 流的目的是處理數(shù)據(jù),它是關(guān)于算法與計(jì)算的。
如果把集合作為流的數(shù)據(jù)源,創(chuàng)建流時(shí)不會(huì)導(dǎo)致數(shù)據(jù)流動(dòng); 如果流的終止操作需要值時(shí),流會(huì)從集合中獲取值; 流只使用一次。
流中心思想是延遲計(jì)算,流直到需要時(shí)才計(jì)算值。
流使用時(shí)一般包括三件事:
● 一個(gè)數(shù)據(jù)源(如集合)來執(zhí)行一個(gè)查詢;
● 一個(gè)中間操作鏈,形成一條流的流水線
● 一個(gè)終端操作,執(zhí)行流水線,生成結(jié)果