【Java8新特性】Stream API有哪些中間操作?看完你也可以吊打面試官!!
阿新 • • 發佈:2020-05-27
## 寫在前面
> 在上一篇《[【Java8新特性】面試官問我:Java8中建立Stream流有哪幾種方式?](https://www.cnblogs.com/binghe001/p/12961977.html)》中,一名讀者去面試被面試官暴虐!歸根結底,那哥兒們還是對Java8的新特性不是很瞭解呀!那麼,我們繼續講述Java8的新特性,旨在最終可以讓每位讀者在跳槽面試的過程中吊打面試官!!
## Stream的中間操作
多箇中間操作可以連線起來形成一個流水線,除非流水線上觸發終止操作,否則中間操作不會執行任何的處理!而在終止操作時一次性全部處理,稱為“惰性求值” 。 Stream的中間操作是不會有任何結果資料輸出的。
Stream的中間操作在整體上可以分為:篩選與切片、對映、排序。接下來,我們就分別對這些中間操作進行簡要的說明。
## 篩選與切片
這裡,我將與篩選和切片有關的操作整理成如下表格。
| 方法 | 描述 |
| ------------------- | ------------------------------------------------------------ |
| filter(Predicate p) | 接收Lambda表示式,從流中排除某些元素 |
| distinct() | 篩選,通過流所生成元素的 hashCode() 和 equals() 去 除重複元素 |
| limit(long maxSize) | 截斷流,使其元素不超過給定數量 |
| skip(long n) | 跳過元素,返回一個扔掉了前 n 個元素的流。若流中元素 不足 n 個,則返回一個空流。與 limit(n) 互補 |
接下來,我們列舉幾個簡單的示例,以便加深理解。
為了更好的測試程式,我先構造了一個物件陣列,如下所示。
```java
protec