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进行运算

1331494be6a7787d737cbe1e8bb44c1a.png

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

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

c33f09150fe393745265d2c41c02423c.png

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值