java8 Stream API之reduce使用说明

网友投稿 291 2023-02-18

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 integers = Arrays.asList(1, 2, 3, 4, 5);

// 没有起始值时返回为Optional类型

Optional sumOptional = integers.stream().reduce(yuiZRSUkInteger::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 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 integerStream = Stream.of(1, 2, 3, 4, 5);

Integer minReduce = integerStream.reduce(Integer.MAX_VALUE, Integer::min);

System.out.println(minReduce);

// min

Stream 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 integerStream = Stream.of(1, 2, 3, 4, 5);

Integer maxReduce = integerStream.reduce(Integer.MIN_VALUE, Integer::max);

System.out.println(maxReduce);

// max

Stream integerStream1 = Stream.of(1, 2, 3, 4, 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方法,通常涉及到一些底层技术,系统资源相关。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:站长与开发服务各平台数据(站长之家数据中心)
下一篇:怎么样识别电子版营业执照(电子版营业执照怎么查看)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~