官术网_书友最值得收藏!

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。這些操作都是終結操作。

主站蜘蛛池模板: 马山县| 奇台县| 平塘县| 黄梅县| 登封市| 陆丰市| 常德市| 虞城县| 青田县| 阿勒泰市| 阿巴嘎旗| 桦南县| 卢湾区| 合作市| 石渠县| 湖南省| 韶山市| 娱乐| 巫溪县| 九江县| 商洛市| 柘城县| 榕江县| 手机| 武城县| 太仆寺旗| 潼南县| 噶尔县| 祁阳县| 邯郸市| 哈尔滨市| 远安县| 石林| 南部县| 宁武县| 涟源市| 桑植县| 蕲春县| 资兴市| 江阴市| 阿城市|