JDK8新特性詳解-Stream流常用方法(二)
阿新 • • 發佈:2020-12-23
### **Stream流的使用**
流操作是Java8提供一個重要新特性,它允許開發人員以宣告性方式處理集合,其核心類庫主要改進了對集合類的 API和新增Stream操作。Stream類中每一個方法都對應集合上的一種操作。將真正的函數語言程式設計引入到Java中,能 讓程式碼更加簡潔,極大地簡化了集合的處理操作,提高了開發的效率和生產力。
同時stream不是一種資料結構,它只是某種資料來源的一個檢視,資料來源可以是一個數組,Java容器或I/O channel等。在Stream中的操作每一次都會產生新的流,內部不會像普通集合操作一樣立刻獲取值,而是惰性 取值,只有等到使用者真正需要結果的時候才會執行。**並且對於現在呼叫的方法,本身都是一種高層次構件,與執行緒模型無關。因此在並行使用中,開發者們無需再去操 心執行緒和鎖了。Stream內部都已經做好了**。
```Java
如果剛接觸流操作的話,可能會感覺不太舒服。其實理解流操作的話可以對比資料庫操作。把流的操作理解為對資料庫中 資料的查詢操作
集合 = 資料表
元素 = 表中的每條資料
屬性 = 每條資料的列
流API = sql查詢
```
## 流操作詳解
Stream流介面中定義了許多對於集合的操作方法,總的來說可以分為兩大類:中間操作和終端操作。
- 中間操作:會返回一個流,通過這種方式可以將多箇中間操作連線起來,形成一個呼叫鏈,從而轉換為另外 一個流。除非呼叫鏈後存在一個終端操作,否則中間操作對流不會進行任何結果處理。
- 終端操作:會返回一個具體的結果,如boolean、list、integer等。
**1、篩選**
對於集合的操作,經常性的會涉及到對於集中符合條件的資料篩選,Stream中對於資料篩選兩個常見的API: filter(過濾)、distinct(去重)
**1.1基於filter()實現資料過**
該方法會接收一個返回boolean的函式作為引數,終返回一個包括所有符合條件元素的流。
案例:獲取所有年齡20歲以下的學生
```Java
/**
* @author 我是七月呀
* @date 2020/12/22
*/
public class FilterDemo {
public static void main(String[] args) {
//獲取所有年齡20歲以下的學生
A