stream是用來操作容器中的資料,例如過濾,對映,規約,排序,查詢記錄等等
stream是和cpu打交道
集合關注的是資料的儲存,是和記憶體打交道
總結:集合說的是資料,stream說的是計算
注意:
①stream 自己不會儲存元素(資料),資料仍然是在集合當中。類似於迭代器,迭代器是用來遍歷集合的,迭代器本身也不存資料,資料還是在集合當中。stream關注的是對資料的運算
②stream 不會改變源物件。相反,會返回乙個持有結果的新stream。即stream具有不可變的特性
③stream 操作是延遲執行的。(乙個操作代表著乙個方法,可以理解為每次調完之後就點一下,去呼叫方法,比如:過濾.對映.)對於中間操作來說,只要沒有呼叫終止操作,中間操作都不執行,只有呼叫終止操作才會把中間操作都執行,也就是說是延遲執行的。這意味著會等到需要結果的時候才執行
stream要想進行一些操作,要分成三個步驟
stream操作的三個步驟
1) 建立 stream的物件
乙個資料來源(如:集合、陣列),獲取乙個流
根據資料來源得到對應的stream
2) 中間操作
乙個中間操作鏈(即可以有多個中間操作),對資料來源的資料進行處理
3) 終止操作(終端操作)
一旦執行終止操作,就執行中間操作鏈,並產生結果,如果不執行終止操作,中間操作鏈就不會執行。一旦產生結果以後就終止了,當前的stream物件就不能再去點中間操作了,之後,不會再被使用。也就是說如果再想使用,又要從頭再造stream
stream的例項化:
public class streamapitest
//因為陣列也是一種容器,所以還可以通過陣列
//建立 stream方式二:通過陣列
//呼叫arrays的 static streamstream(t array): 返回乙個流
@test
public void test2();
intstream stream = arrays.stream(arr);//因為我們給的是int,所以返回的是intstream
// public static doublestream stream(double array)其他的基本型別同理
//如果扔進去的是自定義型別陣列,那麼返回的就是stream《自定義型別名》
employee e1=new employee(1001,"tom");
employee e2=new employee(1002,"jerry");
employee arr1=new employee;//這是靜態初始化
streamstream1 = arrays.stream(arr1);//型別是通過stream的泛型體現的
}//建立stream方式三:通過stream的of()
//of中可以寫多個值,相當於構成乙個容器,stream物件就可以操作這個容器
@test
public void test3()
//建立 stream方式四:建立無限流(用的比較少,了解即可,前面對應的多個資料都是有限的)
//這裡建立的是無限個元素對應的stream
@test
public void test4()
}
輸出結果為:
024
681012
1416
180.7994332036259181
0.8757405751180581
0.4900134823715929
0.5749140464545273
0.147323475304579
0.8053550561631083
0.4990720011692096
0.8312497979827275
0.9049172841130427
0.7791026058049584
流式思想概述(Stream
整體來看,流式思想類似於工廠車間的 生產流水線 這張圖中展示了過濾 對映 跳過 計數等多步操作,這是一種集合元素的處理方案,而方案就是一種 函式模 型 圖中的每乙個方框都是乙個 流 呼叫指定的方法,可以從乙個流模型轉換為另乙個流模型。而最右側的數字 3是最終結果。這裡的 filter map ski...
Stream 建立流的方式
string arr 方法一 arrays的靜態方法,傳入乙個泛型陣列,建立乙個流 stream stream1 arrays.stream arr 方法二 通過stream的靜態方法,傳入乙個泛型陣列,或者多個引數,建立乙個流,該靜態方法,底層呼叫了arrays的stream靜態方法 stream...
談談spark2以及stream
4月底去參加了qcon 2018北京站,新興資料處理專場有機會聽到了spark structedstreming blink kafka stream三場的分享,整個聽下來有一些感想,剛好最近又在看spark2這塊的一些原始碼設計,所以想著寫點自己的理解。想要解釋為什麼會出現dataset,那就不得...