1. 程式人生 > 程式設計 >java8 Stream API之reduce使用說明

java8 Stream API之reduce使用說明

本篇我們只講reduce。

reduce的作用是把stream中的元素給組合起來。

至於怎麼組合起來:它需要我們首先提供一個起始種子,然後依照某種運算規則使其與stream的第一個元素髮生關係產生一個新的種子,這個新的種子再緊接著與stream的第二個元素髮生關係產生又一個新的種子,就這樣依次遞迴執行,最後產生的結果就是reduce的最終產出,這就是reduce的演算法最通俗的描述;

那麼結合實際的業務場景來說,運用reduce我們可以做sum,min,max,average,所以這些我們稱之為針對具體應用場景的reduce,這些常用的reduce,stream api已經為我們封裝了對應的方法。

以下給出一些具體應用場景的reduce實現方式:

sum

  @Test
  public void testSum() {
    List<Integer> integers = Arrays.asList(1,2,3,4,5);

    // 沒有起始值時返回為Optional型別
    Optional<Integer> sumOptional = integers.stream().reduce(Integer::sum);
    System.out.println(sumOptional.get());

    // 可以給一個起始種子值
    Integer sumReduce = integers.stream().reduce(0,Integer::sum);
    System.out.println(sumReduce);

    //直接用sum方法
    Integer sum = integers.stream().mapToInt(i -> i).sum();
    System.out.println(sum);
  }

concat

@Test
  public void testConcat() {
    //構造字串流
    List<String> strs = Arrays.asList("H","E","L","O");

    // reduce
    String concatReduce = strs.stream().reduce("",String::concat);
    System.out.println(concatReduce);
  }

min

  @Test
  public void testMin() {

    //min reduce
    Stream<Integer> integerStream = Stream.of(1,5);
    Integer minReduce = integerStream.reduce(Integer.MAX_VALUE,Integer::min);
    System.out.println(minReduce);


    // min
    Stream<Integer> integerStream1 = Stream.of(1,5);
    OptionalInt min = integerStream1.mapToInt(i -> i).min();
    System.out.println(min.getAsInt());
  }

max

  @Test
  public void testMax() {

    //max reduce
    Stream<Integer> integerStream = Stream.of(1,5);
    Integer maxReduce = integerStream.reduce(Integer.MIN_VALUE,Integer::max);
    System.out.println(maxReduce);


    // max
    Stream<Integer> integerStream1 = Stream.of(1,5);
    OptionalInt max = integerStream1.mapToInt(i -> i).max();
    System.out.println(max.getAsInt());
  }

ok,相信大家已經對reduce有所瞭解!

補充知識:瞭解Java JNI及動態連結庫

提到Java JNI不得不提到動態連結庫,在window作業系統中一般為字尾為DLL的檔案,在Linux中為.so檔案。動態連結庫的作用在於為多個應用程式提供相同的函式功能,以此達到節省程式碼量,節省記憶體,共享相關資料、系統資源的作用。

Java的JNI則是為了對接這種功能的技術。

Java中的一個方法申明為native時,是不會直接用java程式碼去做實現的,因為native方法就是通過JNI去呼叫動態庫。JDK中有很多native方法,通常涉及到一些底層技術,系統資源相關。

以上這篇java8 Stream API之reduce使用說明就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。