在很多人去面試的時候被問起Stream流,如果沒有玩過JDK8的Stream人都以為面試官在問你IO流,然後你一說IO流面試官直接否定你,然後再讓你說Stream,然後…
并且現在很多公司裡寫的代碼也開始大量地加入了Stream流的操作,是以下面我們就來看看JDK8 給我們提供的一個非常好用的Stream的使用。
- Stream介紹
Stream以及相關流接口都是JDK8 新增的API,它可以讓我們聲明式地對數組或集合的資料進行處理,是以它看起來更像是一種可以對資料處理的“資料流”。
可以把流的看成是一個管道裡的流,這樣我們可以在管道中對流資料進行一些操作,比如篩選、排序、周遊、計數、聚合等等。
開發中很多情況如果我們使用流對集合中資料進行操作就可以做到代碼即幹淨簡單、又高效地實作。
值得注意的是Stream本身不會存儲元素、Stream也不會改變源對象(原始資料)。
流的使用可以分為三部分:
擷取一個資料流
流的中間操作
流的終結操作(可以擷取結果)
- 流的擷取
流的擷取方式也有很多種,我們即可以通過Stream提供的of方法來擷取一個流,也可以使用數組和集合提供的方法來擷取一個流。
Stream擷取
數組擷取
集合擷取
集合JDK8之後增加了stream()方法和parallelStream()方法可以分别擷取一個串行流和并行流(多線程)。
- 流的中間操作
Stream流提供了很多的的中間處理操作,例如:周遊、過濾、排序、限定查詢等。
循環周遊-forEach
forEach方法中就是對集合循環周遊的時候執行的代碼,這裡可以使用Lambda表達式來完成,使用如下:
資料過濾-filter
filter方法可以根據我們設定的過濾條件是否滿足來篩選資料,需要傳回一個boolean結果,如果傳回為true則通過放入結果集,傳回false則不會放入結果集。
使用如下:
元素值轉換-map
map()方法支援對于集合中的元素進行一對一處理和轉換,可以使用lambda表達式,使用如下:
排序-sort
限定查詢-limit
去重重複元素-distinct
4.流的終結操作
流的終結操作也有很多,這裡主要列舉一些常用的方法,如下:
計數-count
最值擷取-max/min
傳回第一個數值-findFirst
傳回數組-toArray
傳回不同類型的集合-collect
以上就是非常全面的Stream流的操作了,已經熟悉的小夥伴們就可以使用Stream流來替換以往的操作體驗下它的簡單高效吧。