java8 Stream API之reduce使用说明
本篇我们只讲reduce。
reduce的作用是把stream中的元素给组合起来。
至于怎么组合起来:它需要我们首先提供一个起始种子,然后依照某种运算规则使其与stream的第一个元素发生关系产生一个新的种子,这个新的种子再紧接着与stream的第二个元素发生关系产生又一个新的种子,就这样依次递归执行,最后产生的结果就是reduce的最终产出,这就是reduce的算法最通俗的描述;
那么结合实际的业务场景来说,运用reduce我们可以做sum,min,max,average,所以这些我们称之为针对具体应用场景的reduce,这些常用的reduce,streamapi已经为我们封装了对应的方法。
以下给出一些具体应用场景的reduce实现方式:
sum
@Test
publicvoidtestSum(){
Listintegers=Arrays.asList(1,2,3,4,5);
//没有起始值时返回为Optional类型
OptionalsumOptional=integers.stream().reduce(Integer::sum);
System.out.println(sumOptional.get());
//可以给一个起始种子值
IntegersumReduce=integers.stream().reduce(0,Integer::sum);
System.out.println(sumReduce);
//直接用sum方法
Integersum=integers.stream().mapToInt(i->i).sum();
System.out.println(sum);
}
concat
@Test
publicvoidtestConcat(){
//构造字符串流
Liststrs=Arrays.asList("H","E","L","L","O");
//reduce
StringconcatReduce=strs.stream().reduce("",String::concat);
System.out.println(concatReduce);
}
min
@Test
publicvoidtestMin(){
//minreduce
StreamintegerStream=Stream.of(1,2,3,4,5);
IntegerminReduce=integerStream.reduce(Integer.MAX_VALUE,Integer::min);
System.out.println(minReduce);
//min
StreamintegerStream1=Stream.of(1,2,3,4,5);
OptionalIntmin=integerStream1.mapToInt(i->i).min();
System.out.println(min.getAsInt());
}
max
@Test
publicvoidtestMax(){
//maxreduce
StreamintegerStream=Stream.of(1,2,3,4,5);
IntegermaxReduce=integerStream.reduce(Integer.MIN_VALUE,Integer::max);
System.out.println(maxReduce);
//max
StreamintegerStream1=Stream.of(1,2,3,4,5);
OptionalIntmax=integerStream1.mapToInt(i->i).max();
System.out.println(max.getAsInt());
}
ok,相信大家已经对reduce有所了解!
补充知识:了解JavaJNI及动态链接库
提到JavaJNI不得不提到动态链接库,在window操作系统中一般为后缀为DLL的文件,在Linux中为.so文件。动态链接库的作用在于为多个应用程序提供相同的函数功能,以此达到节省代码量,节省内存,共享相关数据、系统资源的作用。
Java的JNI则是为了对接这种功能的技术。
Java中的一个方法申明为native时,是不会直接用java代码去做实现的,因为native方法就是通过JNI去调用动态库。JDK中有很多native方法,通常涉及到一些底层技术,系统资源相关。
以上这篇java8StreamAPI之reduce使用说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。