java8 Stream API之reduce使用说明

 更新时间:2020年11月25日 09:14:21   作者:争夕  
这篇文章主要介绍了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<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使用说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java设计模式之建造者模式

    Java设计模式之建造者模式

    这篇文章介绍了Java设计模式之建造者模式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • RocketMQ中消费者的消费进度管理

    RocketMQ中消费者的消费进度管理

    这篇文章主要介绍了RocketMQ中消费者的消费进度管理,业务实现消费回调的时候,当且仅当此回调函数返回ConsumeConcurrentlyStatus.CONSUME_SUCCESS ,RocketMQ才会认为这批消息(默认是1条)是消费完成的,需要的朋友可以参考下
    2023-10-10
  • Spring MVC 基于URL的映射规则(注解版)

    Spring MVC 基于URL的映射规则(注解版)

    这篇文章主要介绍了Spring MVC 基于URL的映射规则(注解版) ,详细的介绍了几种方式,有兴趣的可以了解一下
    2017-05-05
  • Spring定时服务QuartZ原理及代码案例

    Spring定时服务QuartZ原理及代码案例

    这篇文章主要介绍了Spring定时服务QuartZ原理及代码案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • SpringBoot集成Auth0 JWT的示例代码

    SpringBoot集成Auth0 JWT的示例代码

    本文主要介绍了SpringBoot集成Auth0 JWT的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Java数组高级算法与Arrays类常见操作小结【排序、查找】

    Java数组高级算法与Arrays类常见操作小结【排序、查找】

    这篇文章主要介绍了Java数组高级算法与Arrays类常见操作,结合实例形式总结分析了Java数组常见的排序算法、查找算法相关原理、实现与使用技巧,需要的朋友可以参考下
    2019-03-03
  • 详解Java信号量Semaphore的原理及使用

    详解Java信号量Semaphore的原理及使用

    Semaphore来自于JDK1.5的JUC包,直译过来就是信号量,被作为一种多线程并发控制工具来使用。本文将详解其原理与使用方法,感兴趣的可以学习一下
    2022-05-05
  • SpringBoot集成Nacos的详细教程

    SpringBoot集成Nacos的详细教程

    这篇文章主要介绍了SpringBoot集成Nacos的详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Spring boot中Jackson的操作指南

    Spring boot中Jackson的操作指南

    这篇文章主要给大家介绍了关于Spring boot中Jackson操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • 解决mybatis plus报错com.microsoft.sqlserver.jdbc.SQLServerException:必须执行该语句才能获得结果

    解决mybatis plus报错com.microsoft.sqlserver.jdbc.SQLServerE

    这篇文章主要介绍了解决mybatis plus报错com.microsoft.sqlserver.jdbc.SQLServerException:必须执行该语句才能获得结果,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05

最新评论