切換語言為:簡體
深入理解java8中的規約 reduce 規約

深入理解java8中的規約 reduce 規約

  • 爱糖宝
  • 2024-07-11
  • 2065
  • 0
  • 0

常見場景圖示

我們常見使用場景:累加、求最大值 如圖示 累加:

深入理解java8中的規約 reduce 規約 

最大值

深入理解java8中的規約 reduce 規約

reduce中的BiFunctionBinaryOperator是什麼

reduce定義如下: T reduce(T identity, BinaryOperator<T> accumulator);

首先了解一下BiFunctionBinaryOperator 帶有BinaryBi關鍵字都是二元運算(就是謂詞帶有 有兩個形參)

深入理解java8中的規約 reduce 規約

BiFunction函式式介面如下: 傳入 T型別變數t  U型別變數u 返回R型別變數

@FunctionalInterface
// (T t,U u)->R
public interface BiFunction<T, U, R> {
    R apply(T t, U u);
}

BinaryOperator函式式介面如下: 繼承BiFunction  形參型別和返回型別相同

@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T,T,T> {
    
}

理解reduce

reduce常見的定義方式:

T reduce(T identity, BinaryOperator accumulator);

Optional<T> reduce(BinaryOperator<T> accumulator);

下面詳細解釋

T reduce(T identity, BinaryOperator accumulator);

第一個引數傳入T型別值,第二分謂詞  (T t,T t)->T 返回值型別為T

通俗點總結: 一個初始值 一個Lambda來把兩個流元素結合起來併產生一個新值

常用:累加、累積

Optional reduce(BinaryOperator accumulator);

謂詞  (T t,T t)->T 返回值型別為T

Optional容器類表示一個值存在或者不存在,避免和null檢查

reduce要考慮新的值和下一個元素,將流中的第一個元素作為初始值,比較產生最大值,然後繼續和下一個元素比較。

常用:最大值,最小值

程式碼舉例

最開始的圖示的程式碼如下:

累加:

List<Integer> integers = Arrays.asList(4, 5, 3, 9);
Integer reduce = integers.stream().reduce(0, (a, b) -> a + b);
System.out.println("求和:"+reduce);
//求和:21

深入理解java8中的規約 reduce 規約

求最大值

List<Integer> integers = Arrays.asList(4, 5, 3, 9);
Optional<Integer> reduce = integers.stream().reduce(Integer::max);
System.out.println("最大值:" + reduce.get());
//最大值:9

深入理解java8中的規約 reduce 規約

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.