stream and lambda(13) - 終止操作之計數 count 與比較 min、max
在 Stream 的終止操作中,有幾個關於聚合的方法,包括計數、最小最大值取值。
計數 count
long count();
注意了,Stream 不是集合,不能再用 size()
來計算元素個數了。
public void countTest() { long count = Stream.of(1, 1, 2, 2, 3).count(); System.out.println(count); }
比較 min、max
Optional<T> min(Comparator<? super T> comparator); Optional<T> max(Comparator<? super T> comparator);
min
和 max
一眼看上去老熟悉了,畢竟我們講過多次比較器了。這兩個方法根據傳入的比較器來判斷兩個物件之間的大小,從而確定最小最大值。
public void minMaxTest() { Optional<Integer> min = Stream.of(1, 2, 3, 4, 5).min(Comparator.naturalOrder()); System.out.println(min.get()); Optional<Integer> max = Stream.of(1, 2, 3, 4, 5).max(Comparator.naturalOrder()); System.out.println(max.get()); }
此處返回的是 Optional
,本例因為確定有值,所以直接使用 get
方法。
試想一下,傳統 for
迴圈來自己求最大最小值有多少程式碼要寫?判斷非空、迴圈、首元素賦值、比較並重新賦值,經過這麼多固定步驟才可以得到我們想要的最大最小值。現在,你需要一行程式碼。不要998,也不要98,1塊錢就可以帶回家。
總結
-
count
、min
、max
三個方法使用起來還是比較簡單的,基本上是看了 API 就能上手。 -
min
和max
返回的是Optional
,如果是一個空的 Stream,是沒有最大或最小值的,取值時注意儘量避免Optional.get
。
注:本文配套程式碼可在 github
檢視: stream-and-lambda
「其他文章」
- stream and lambda(18) - 終止操作之 stream 收集器 collectors
- stream and lambda(15) - 終止操作之 stream 陣列操作 toArray
- stream and lambda(13) - 終止操作之計數 count 與比較 min、max
- stream and lambda(12) - 終止操作之查詢與匹配(findAny、findFirst、allMatch、anyMatch、noneMatch)
- stream and lambda(11) - Optional 簡介
- stream and lambda(10) - 中間操作之排序sorted與除錯peek
- stream and lambda(9) - 中間操作之map操作(map、flatmap)
- stream and lambda(8) - 中間操作之篩選操作(filter、distinct、limit、skip)
- stream and lambda(7) - stream 的建立
- stream and lambda(6) - stream 簡介
- stream and lambda(5) - lambda 表示式最佳實踐
- stream and lambda(3) - jdk 提供的函式式介面
- stream and lambda(2) - 函式式介面簡介
- stream and lambda(1) - lambda 簡介