Stream概述以及建立Stream物件

2021-09-26 12:00:02 字數 2013 閱讀 6077

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,那就不得...