【Java8新特性】面試官問我:Java8中建立Stream流有哪幾種方式?
阿新 • • 發佈:2020-05-26
## 寫在前面
> 先說點題外話:不少讀者工作幾年後,仍然在使用Java7之前版本的方法,對於Java8版本的新特性,甚至是Java7的新特性幾乎沒有接觸過。真心想對這些讀者說:你真的需要了解下Java8甚至以後版本的新特性了。
>#
> 今天,一名讀者出去面試,面試官問他:說說Java8中建立Stream流有哪幾種方式?他竟然沒回答上來!!
## Stream概述
Java8中有兩大最為重要的改變。第一個是 Lambda 表示式;另外一個則是 Stream API(java.util.stream.*)。
Stream 是 Java8 中處理集合的關鍵抽象概念,它可以指定你希望對集合進行的操作,可以執行非常複雜的查詢、過濾和對映資料等操作。使用Stream API 對集合資料進行操作,就類似於使用 SQL 執行的資料庫查詢。也可以使用 Stream API 來並行執行操作。簡而言之,Stream API 提供了一種高效且易於使用的處理資料的方式。
## 何為Stream?
**流(Stream) 到底是什麼呢?**
> 可以這麼理解流:流就是資料渠道,用於操作資料來源(集合、陣列等)所生成的元素序列。
“集合講的是資料,流講的是計算! ”
**注意:**
①Stream 自己不會儲存元素。
②Stream 不會改變源物件。相反,他們會返回一個持有結果的新Stream。
③Stream 操作是延遲執行的。這意味著他們會等到需要結果的時候才執行。
## Stream操作步驟
**1.建立 Stream**
一個數據源(如: 集合、陣列), 獲取一個流。
**2.中間操作**
一箇中間操作鏈,對資料來源的資料進行處理。
**3.終止操作(終端操作)**
一個終止操作,執行中間操作鏈,併產生結果 。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200525225333187.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2wxMDI4Mzg2ODA0,size_16,color_FFFFFF,t_70#pic_center)
## 如何建立Stream流?
這裡,建立測試類TestStreamAPI1,所有的操作都是在TestStreamAPI1類中完成的。
**(1)通過Collection系列集合提供的stream()方法或者parallelStream()方法來建立Stream。**
在Java8中,Collection 介面被擴充套件,提供了兩個獲取流的預設方法,如下所示。
```java
defaul