- Java核心技術·卷Ⅱ:高級特性(原書第10版)
- (美)凱S.霍斯特曼
- 758字
- 2020-10-30 18:10:33
1.6 簡單約簡
現在你已經看到了如何創建和轉換流,我們終于可以討論最重要的內容了,即從流數據中獲得答案。我們在本節所討論的方法被稱為約簡。約簡是一種終結操作(terminal operation),它們會將流約簡為可以在程序中使用的非流值。
你已經看到過一種簡單約簡:count方法會返回流中元素的數量。
其他的簡單約簡還有max和min,它們會返回最大值和最小值。這里要稍作解釋,這些方法返回的是一個類型Optional<T>的值,它要么在其中包裝了答案,要么表示沒有任何值(因為流碰巧為空)。在過去,碰到這種情況返回null是很常見的,但是這樣做會導致在未做完備測試的程序中產生空指針異常。Optional類型是一種更好的表示缺少返回值的方式。我們將在下一節中詳細討論Optional類型。下面展示了可以如何獲得流中的最大值:

findFirst返回的是非空集合中的第一個值。它通常會在與filter組合使用時顯得很有用。例如,下面展示了如何找到第一個以字母Q開頭的單詞,前提是存在這樣的單詞:

如果不強調使用第一個匹配,而是使用任意的匹配都可以,那么就可以使用findAny方法。這個方法在并行處理流時會很有效,因為流可以報告任何它找到的匹配而不是被限制為必須報告第一個匹配。

如果只想知道是否存在匹配,那么可以使用anyMatch。這個方法會接受一個斷言引元,因此不需要使用filter。

還有allMatch和noneMatch方法,它們分別會在所有元素和沒有任何元素匹配斷言的情況下返回true。這些方法也可以通過并行運行而獲益。
java.util.stream.Stream 8
·Optional<T>max(Comparator<?super T>comparator)
·Optional<T>min(Comparator<?super T>comparator)
分別產生這個流的最大元素和最小元素,使用由給定比較器定義的排序規則,如果這個流為空,會產生一個空的Optional對象。這些操作都是終結操作。
·Optional<T>findFirst()
·Optional<T>findAny()
分別產生這個流的第一個和任意一個元素,如果這個流為空,會產生一個空的Optional對象。這些操作都是終結操作。
·boolean anyMatch(Predicate<?super T>predicate)
·boolean allMatch(Predicate<?super T>predicate)
·boolean noneMatch(Predicate<?super T>predicate)
分別在這個流中任意元素、所有元素和沒有任何元素匹配給定斷言時返回true。這些操作都是終結操作。
- GitLab Cookbook
- Learn Type:Driven Development
- 青少年軟件編程基礎與實戰(圖形化編程三級)
- 我的第一本算法書
- Learning Data Mining with R
- Mastering ArcGIS Enterprise Administration
- 移動互聯網軟件開發實驗指導
- 小程序,巧應用:微信小程序開發實戰(第2版)
- Azure Serverless Computing Cookbook
- 細說Python編程:從入門到科學計算
- Spring Boot+MVC實戰指南
- Learning Docker Networking
- Android應用開發深入學習實錄
- Tableau Desktop可視化高級應用
- Qt 4開發實踐