java8 Stream API之reduce使用說明
阿新 • • 發佈:2020-11-25
本篇我們只講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使用說明就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。