stream and lambda(13) - 終止操作之計數 count 與比較 min、max

語言: CN / TW / HK

在 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);

minmax 一眼看上去老熟悉了,畢竟我們講過多次比較器了。這兩個方法根據傳入的比較器來判斷兩個對象之間的大小,從而確定最小最大值。

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塊錢就可以帶回家。

總結

  • countminmax 三個方法使用起來還是比較簡單的,基本上是看了 API 就能上手。
  • minmax 返回的是 Optional ,如果是一個空的 Stream,是沒有最大或最小值的,取值時注意儘量避免 Optional.get

注:本文配套代碼可在 github 查看: stream-and-lambda