今天碰到了java8种的reduce方法,查了资料之后写一些总结,以免自己以后用到。

计算1,2,3,4,5 的和,并且初始值为3

也就是计算3+1+2+3+4+5

1.使用Stream 两个参数的reduce方法进行归约运算

2.使用for循环迭代调用BinaryOperator 的apply进行运算

结果重新作为一个参数,不断地参与到运算之中,直到最后结束

理解reduce的含义重点就在于理解"累 加 器" 的概念

Stream的一个参数和两个参数的方法的基本逻辑都是如此

差别仅仅在于一个参数的是result R = T1 ,然后再继续与剩下的元素参与运算

三个参数的reduce

U reduce(U identity,

BiFunction accumulator,

BinaryOperatorcombiner);

与两个参数的reduce不同的地方在于类型

双参数的返回类型为T Stream类型为T

三参数的返回类型为U Stream类型为T 有了更大的发挥空间 T可能为U 也可能不是U

很显然,三参数的reduce 方法的思维方式同双参数的并无二致

所以问题来了,那还要第三个参数做什么?

其实第三个参数用于在并行计算下 合并各个线程的计算结果

Java 8 中我们可以通过 `::` 关键字来访问类的构造方法,对象方法,静态方法。

IConvert convert = Something::startsWith;

String converted = convert.convert(“123”);

// object methods

Something something = new Something();

IConvert converter = something::endWith;

String converted = converter.convert(“Java”);

// constructor methods

IConvert convert = Something::new;

Something something = convert.convert(“constructors”);

lambda表达式->的使用 lambda 表达式的语法格式如下:

(parameters) -> expression

(parameters) ->{ statements; }

Lambda 表达式的简单例子:

// 1. 不需要参数,返回值为 5

() -> 5

// 2. 接收一个参数(数字类型),返回其2倍的值

x -> 2 * x

// 3. 接受2个参数(数字),并返回他们的差值

(x, y) -> x – y

// 4. 接收2个int型整数,返回他们的和

(int x, int y) -> x + y

// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)

(String s) -> System.out.print(s)

java 8 lambda reduce_java8种的reduce方法和lambda表达式结合使用相关推荐

  1. Java 回调函数(传统方法和lambda方法)-一个例子秒懂

    原文地址为: Java 回调函数(传统方法和lambda方法)-一个例子秒懂 背景: 想写一个工具类 Tool.java ,其中方法 public void readOneLine() 负责一行一行地 ...

  2. C#中的委托,匿名方法和Lambda表达式

    简介在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=5.答案是6个Firs ...

  3. [深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询

    此文章非原创,转载自诗人江湖老,原文地址 在Git上下载源码 在工程中我们少不了要定义类或者结构去储存数据,这些数据将被临时地储存在内存中,现在我们想要对其完成一些类似于查找.过滤等等常见的任务的时候 ...

  4. [Java 基础] 深入理解List的toArray()方法和toArray(T[] a)方法

    深入理解List的toArray()方法和toArray(T[] a)方法 这两个方法都是将列表List中的元素转导出为数组,不同的是,toArray()方法导出的是Object类型数组,而toArr ...

  5. Java实现二树杈_HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用。...

    HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用. HashSet: 首先,hashset底层是 ...

  6. JAVA 8 接口中的默认方法和Lambda 表达式基本使用

    一.接口中的默认方法 在JDK1.8之前,interface之中可以定义变量和方法,变量必须是public.static.final的,方法必须是public.abstract的 在JDK 1.8开始 ...

  7. Java的开方和次方Math.sqrt()方法和Math.pow()方法以及求解有多少种连续正整数之和为N的算法详解

    1. Java的开方和次方运算 java.lang.Math.sqrt(double a) 返回一个数字a的正平方根,返回结果是double型 java.lang.Math.pow(double a, ...

  8. java heap 参数_java heap space解决方法和JVM参数设置

    因为程序要从数据读取近10W行记录处理,当读到9W的时候就出现 java.lang.OutOfMemoryError: Java heap space 这样的错误. 在网上一查可能是JAVA的堆栈设置 ...

  9. java heap 参数_java heap space解决方法和JVM参数设置--- JVM参数设置和程序优化篇

    业界有很多强大的java profile的工具,比如Jporfiler,yourkit,这些收费的东西我就不想说了,想说的是,其实java自己就提供了很多内存监控的小工具,下面列举的工具只是一小部分, ...

最新文章

  1. Subversion hooks脚本配置演示及排错
  2. Variant Analysis(变种分析)——使用已知漏洞发掘未知漏洞
  3. Safari下弹窗问题的解决办法
  4. BZOJ1935 园丁的烦恼
  5. Mac下使用ABTestingGateway快速搭建灰度网关
  6. openwrt dhcp不分配_【装维技巧】DHCP工作原理详解(上)
  7. P5641 【CSGRound2】开拓者的卓识(多项式)
  8. linux内存管理之RSS和VSZ的区别
  9. ibm v3700添加硬盘_机 · 科普帖丨从大到小又从小到大,硬盘这些年是怎么过来的...
  10. 物联网卡设置_物联网卡该怎样设置和使用——酷易充物联
  11. 计算机操作员高级工试题一,计算机操作员高级工操作题复习资料
  12. Guacamole-HTML5无客户端远程桌面
  13. 线性代数之 矩阵乘法的本质
  14. 普中科技51单片机写芯片超时烧录失败问题
  15. 新型单词记忆法汇总(沪江英语):
  16. iOS系统下常用的三方应用URL Scheme值
  17. Python知识拓展
  18. android 第三方模拟器 genymotion安装问题修复
  19. redHat 下配置 vnc 远程控制服务
  20. (完整版!!)十多年从事微波、系统、芯片的经验分享

热门文章

  1. 对话李飞飞:云数据库战争已经进入下半场
  2. 带你认识Flink容错机制的两大方面:作业执行和守护进程
  3. 云图说|将源端MongoDB业务搬迁至华为云DDS的几种方式
  4. 跨越全场景统一架构三大挑战,MindSpore亮出“四招”
  5. 【API进阶之路】破圈,用一个API代替10人内容团队
  6. 新计算 新网络 新旗舰:华为云C6实例首测
  7. navicat怎么设计教室管理信息系统_基于师生体验设计的智能教室是怎么样的?...
  8. MATLAB二维数组的创建与元素提取
  9. java 强制类型转换告警_java-对未声明的强制转换返回警告
  10. m1芯片Mac安装jekyll+搭建GitHub pages个人博客站点