java8 Stream API之reduce使用說明
本篇我們只講reduce。
reduce的作用是把stream中的元素給組合起來。
至于怎么組合起來:它需要我們首先提供一個起始種子,然后依照某種運算規(guī)則使其與stream的第一個元素發(fā)生關系產生一個新的種子,這個新的種子再緊接著與stream的第二個元素發(fā)生關系產生又一個新的種子,就這樣依次遞歸執(zhí)行,最后產生的結果就是reduce的最終產出,這就是reduce的算法最通俗的描述;
那么結合實際的業(yè)務場景來說,運用reduce我們可以做sum,min,max,average,所以這些我們稱之為針對具體應用場景的reduce,這些常用的reduce,stream api已經為我們封裝了對應的方法。
以下給出一些具體應用場景的reduce實現(xiàn)方式:
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", "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, 2, 3, 4, 5); Integer minReduce = integerStream.reduce(Integer.MAX_VALUE, Integer::min); System.out.println(minReduce); // min Stream<Integer> integerStream1 = Stream.of(1, 2, 3, 4, 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, 2, 3, 4, 5); Integer maxReduce = integerStream.reduce(Integer.MIN_VALUE, Integer::max); System.out.println(maxReduce); // max Stream<Integer> integerStream1 = Stream.of(1, 2, 3, 4, 5); OptionalInt max = integerStream1.mapToInt(i -> i).max(); System.out.println(max.getAsInt()); }
ok,相信大家已經對reduce有所了解!
補充知識:了解Java JNI及動態(tài)鏈接庫
提到Java JNI不得不提到動態(tài)鏈接庫,在window操作系統(tǒng)中一般為后綴為DLL的文件,在Linux中為.so文件。動態(tài)鏈接庫的作用在于為多個應用程序提供相同的函數功能,以此達到節(jié)省代碼量,節(jié)省內存,共享相關數據、系統(tǒng)資源的作用。
Java的JNI則是為了對接這種功能的技術。
Java中的一個方法申明為native時,是不會直接用java代碼去做實現(xiàn)的,因為native方法就是通過JNI去調用動態(tài)庫。JDK中有很多native方法,通常涉及到一些底層技術,系統(tǒng)資源相關。
以上這篇java8 Stream API之reduce使用說明就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring MVC 基于URL的映射規(guī)則(注解版)
這篇文章主要介紹了Spring MVC 基于URL的映射規(guī)則(注解版) ,詳細的介紹了幾種方式,有興趣的可以了解一下2017-05-05Java數組高級算法與Arrays類常見操作小結【排序、查找】
這篇文章主要介紹了Java數組高級算法與Arrays類常見操作,結合實例形式總結分析了Java數組常見的排序算法、查找算法相關原理、實現(xiàn)與使用技巧,需要的朋友可以參考下2019-03-03解決mybatis plus報錯com.microsoft.sqlserver.jdbc.SQLServerE
這篇文章主要介紹了解決mybatis plus報錯com.microsoft.sqlserver.jdbc.SQLServerException:必須執(zhí)行該語句才能獲得結果,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05