时间:2021-05-19
本篇我们只讲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", "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及动态链接库
提到Java JNI不得不提到动态链接库,在window操作系统中一般为后缀为DLL的文件,在Linux中为.so文件。动态链接库的作用在于为多个应用程序提供相同的函数功能,以此达到节省代码量,节省内存,共享相关数据、系统资源的作用。
Java的JNI则是为了对接这种功能的技术。
Java中的一个方法申明为native时,是不会直接用java代码去做实现的,因为native方法就是通过JNI去调用动态库。JDK中有很多native方法,通常涉及到一些底层技术,系统资源相关。
以上这篇java8 Stream API之reduce使用说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
背景Java8的stream接口极大地减少了for循环写法的复杂性,stream提供了map/reduce/collect等一系列聚合接口,还支持并发操作:pa
Stream是java8引入的一个重度使用lambda表达式的API。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算
说明在Java8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端遍历传统集合在于使用循环遍历Java8
引言在java8中,您可以使用Arrays.Stream或Stream.of将Array转换为Stream。1.对象数组对于对象数组,Arrays.stream
stream初体验stream是java8中操作集合的一个重要特性,我们先来看看java里面是怎么定义stream的:"asequenceofelementss