热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

java8StreamAPI之reduce使用说明

这篇文章主要介绍了java8StreamAPI之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(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 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方法,通常涉及到一些底层技术,系统资源相关。

以上这篇java8 Stream API之reduce使用说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • ANSI最全介绍linux终端字体改变颜色等ANSI转义序列维基百科,自由的百科全书由于国内不能访问wiki而且国内关于ANSI的介绍都是简短的不能达到,不够完整所以转wiki到此 ... [详细]
  • 远程访问用户 Kindle通过电子书实现控制
    介绍自2007年以来,亚马逊已售出数千万台Kindle,令人印象深刻。但这也意味着数以千万计的人可能会因为这些Kindle中的软件漏洞而被黑客入侵。他 ... [详细]
  • 本文提供了一种有效的方法来解决在VMware虚拟机中安装Windows 10时遇到的OOBE(Out of Box Experience)区域问题,包括激活管理员账户、移除首次启动提示和调整注册表设置的具体步骤。 ... [详细]
  • 为了和DSP兼容,TSint64和TUint64设置成TSint40和TUint40一样的数结果VC中还是认为是32位的,显然不合适typedefsig ... [详细]
  • 本文探讨了如何利用 Application 对象在 PHP 应用程序中共享数据,特别是在多用户环境中保持数据的一致性和安全性。文章还介绍了 Application 对象的基本结构、方法和事件,并提供了实际应用示例。 ... [详细]
  • 死锁的概念“死锁”指的是:多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能进行,而导致两个或者多个线程都在等待对方释放资源 ... [详细]
  • 树莓派(简称RPI)通常需要配合电脑使用,但对于某些用户或特定场合,手机作为主要携带设备,能够直接用于配置和管理RPI,这具有重要的实用价值。 ... [详细]
  • 1.选择一个翻译页面,我选择的是有道词典(http:dict.youdao.com)2.随便输入一个英语单词进行翻译,然后查看源文件,找到 ... [详细]
  • Kubernetes与Docker之间的关系解析
    本文探讨了Kubernetes(简称k8s)与Docker之间的关系,旨在帮助读者理解这两种技术如何协同工作,以提高应用程序的部署效率和可扩展性。文章首先介绍了两者的基本概念,然后从虚拟化和部署的角度深入分析。 ... [详细]
  • 本文详细介绍了Linux环境下的两个实用命令——seq和sed。seq命令主要用于生成一系列按指定步长递增或递减的数字序列,支持自定义数字格式、宽度及分隔符。sed命令则是强大的文本处理工具,适用于文件内容的增加、删除、修改和查询等操作。 ... [详细]
  • Linux 存储堆栈架构图
    本文提供了一张清晰的Linux存储堆栈架构图,并对比了多种iSCSI后端解决方案,如LIO和STGT。文中还提供了详细的资源链接,帮助读者深入了解这些技术。 ... [详细]
  • 本文介绍了EasyRTSPClient这一高效、稳定的RTSP客户端工具库,并详细阐述了其在与大华球机对接过程中遇到的预览问题及解决方法。 ... [详细]
  • Linux系统中高效解决高Buff/Cache占用问题
    本文详细探讨了在Linux系统中遇到的高Buff/Cache占用问题及其解决方案,提供了手动清除与定时任务自动化处理的方法。 ... [详细]
  • Python安全实践:Web安全与SQL注入防御
    本文旨在介绍Web安全的基础知识,特别是如何使用Python和相关工具来识别和防止SQL注入攻击。通过实际案例分析,帮助读者理解SQL注入的危害,并掌握有效的防御策略。 ... [详细]
  • Linux环境下的PHP7安装与配置指南
    本文详细介绍了如何在Linux操作系统中安装和配置PHP7,包括检查当前PHP版本、升级PHP以及配置MySQL支持等步骤,适合后端开发者参考。 ... [详细]
author-avatar
手机用户2502895987
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有