java 8 lambda reduce_java8种的reduce方法和lambda表达式结合使用
今天碰到了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表达式结合使用相关推荐
- Java 回调函数(传统方法和lambda方法)-一个例子秒懂
原文地址为: Java 回调函数(传统方法和lambda方法)-一个例子秒懂 背景: 想写一个工具类 Tool.java ,其中方法 public void readOneLine() 负责一行一行地 ...
- C#中的委托,匿名方法和Lambda表达式
简介在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=5.答案是6个Firs ...
- [深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询
此文章非原创,转载自诗人江湖老,原文地址 在Git上下载源码 在工程中我们少不了要定义类或者结构去储存数据,这些数据将被临时地储存在内存中,现在我们想要对其完成一些类似于查找.过滤等等常见的任务的时候 ...
- [Java 基础] 深入理解List的toArray()方法和toArray(T[] a)方法
深入理解List的toArray()方法和toArray(T[] a)方法 这两个方法都是将列表List中的元素转导出为数组,不同的是,toArray()方法导出的是Object类型数组,而toArr ...
- Java实现二树杈_HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用。...
HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用. HashSet: 首先,hashset底层是 ...
- JAVA 8 接口中的默认方法和Lambda 表达式基本使用
一.接口中的默认方法 在JDK1.8之前,interface之中可以定义变量和方法,变量必须是public.static.final的,方法必须是public.abstract的 在JDK 1.8开始 ...
- Java的开方和次方Math.sqrt()方法和Math.pow()方法以及求解有多少种连续正整数之和为N的算法详解
1. Java的开方和次方运算 java.lang.Math.sqrt(double a) 返回一个数字a的正平方根,返回结果是double型 java.lang.Math.pow(double a, ...
- java heap 参数_java heap space解决方法和JVM参数设置
因为程序要从数据读取近10W行记录处理,当读到9W的时候就出现 java.lang.OutOfMemoryError: Java heap space 这样的错误. 在网上一查可能是JAVA的堆栈设置 ...
- java heap 参数_java heap space解决方法和JVM参数设置--- JVM参数设置和程序优化篇
业界有很多强大的java profile的工具,比如Jporfiler,yourkit,这些收费的东西我就不想说了,想说的是,其实java自己就提供了很多内存监控的小工具,下面列举的工具只是一小部分, ...
最新文章
- Subversion hooks脚本配置演示及排错
- Variant Analysis(变种分析)——使用已知漏洞发掘未知漏洞
- Safari下弹窗问题的解决办法
- BZOJ1935 园丁的烦恼
- Mac下使用ABTestingGateway快速搭建灰度网关
- openwrt dhcp不分配_【装维技巧】DHCP工作原理详解(上)
- P5641 【CSGRound2】开拓者的卓识(多项式)
- linux内存管理之RSS和VSZ的区别
- ibm v3700添加硬盘_机 · 科普帖丨从大到小又从小到大,硬盘这些年是怎么过来的...
- 物联网卡设置_物联网卡该怎样设置和使用——酷易充物联
- 计算机操作员高级工试题一,计算机操作员高级工操作题复习资料
- Guacamole-HTML5无客户端远程桌面
- 线性代数之 矩阵乘法的本质
- 普中科技51单片机写芯片超时烧录失败问题
- 新型单词记忆法汇总(沪江英语):
- iOS系统下常用的三方应用URL Scheme值
- Python知识拓展
- android 第三方模拟器 genymotion安装问题修复
- redHat 下配置 vnc 远程控制服务
- (完整版!!)十多年从事微波、系统、芯片的经验分享
热门文章
- 对话李飞飞:云数据库战争已经进入下半场
- 带你认识Flink容错机制的两大方面:作业执行和守护进程
- 云图说|将源端MongoDB业务搬迁至华为云DDS的几种方式
- 跨越全场景统一架构三大挑战,MindSpore亮出“四招”
- 【API进阶之路】破圈,用一个API代替10人内容团队
- 新计算 新网络 新旗舰:华为云C6实例首测
- navicat怎么设计教室管理信息系统_基于师生体验设计的智能教室是怎么样的?...
- MATLAB二维数组的创建与元素提取
- java 强制类型转换告警_java-对未声明的强制转换返回警告
- m1芯片Mac安装jekyll+搭建GitHub pages个人博客站点