1. 程式人生 > >【Java8新特性】面試官:談談Java8中的Stream API有哪些終止操作?

【Java8新特性】面試官:談談Java8中的Stream API有哪些終止操作?

## 寫在前面 > 如果你出去面試,面試官問了你關於Java8 Stream API的一些問題,比如:Java8中建立Stream流有哪幾種方式?(可以參見:《[【Java8新特性】面試官問我:Java8中建立Stream流有哪幾種方式?](https://www.cnblogs.com/binghe001/p/12961977.html)》)Java8中的Stream API有哪些中間操作?(可以參見:《[【Java8新特性】Stream API有哪些中間操作?看完你也可以吊打面試官!!](https://www.cnblogs.com/binghe001/p/12969825.html)》)如果你都很好的回答了這些問題,那麼,面試官可能又會問你:Java8中的Stream API有哪些終止操作呢?沒錯,這就是Java8中有關Stream API的靈魂三問!不要覺得是面試官在為難你,只有你掌握了這些細節,你就可以反過來吊打面試官了! ## Stream的終止操作 終端操作會從流的流水線生成結果。其結果可以是任何不是流的值,例如: List、 Integer、Double、String等等,甚至是 void 。 在Java8中,Stream的終止操作可以分為:查詢與匹配、規約和收集。接下來,我們就分別簡單說明下這些終止操作。 ## 查詢與匹配 Stream API中有關查詢與匹配的方法如下表所示。 | 方法 | 描述 | | ---------------------- | ------------------------------------------------------------ | | allMatch(Predicate p) | 檢查是否匹配所有元素 | | anyMatch(Predicate p) | 檢查是否至少匹配一個元素 | | noneMatch(Predicate p) | 檢查是否沒有匹配所有元素 | | findFirst() | 返回第一個元素 | | findAny() | 返回當前流中的任意元素 | | count() | 返回流中元素總數 | | max(Comparator c) | 返回流中最大值 | | min(Comparator c) | 返回流中最小值 | | forEach(Consumer c) | 內部迭代(使用 Collection 介面需要使用者去做迭代,稱為外部迭代。相反, Stream API 使用內部迭代) | 同樣的,我們對每個重要的方法進行簡單的示例說明,這裡,我們首先建立一個Employee類,Employee類的定義如下所示。 ```java @Data @Builder @ToString @NoArgsConstructor @AllArgsConstructor public class Employee implements Serializable { private static final long serialVersionUID = -9079722457749166858L; private String name; private Integer age; private Double salary; private Stauts stauts; public enum Stauts{ WORKING, SLEEPING, VOCATION } } ``` 接下來,我們在測試類中定義一個用於測試的集合employees,如下所示。 ```java protec