java8 stream reduce_java8 Stream API之reduce

通过前面那篇文章,我们已经对Stream API有了初步的认识,并对它在集合处理中的增强作用表示了肯定。同时我们上篇中示例了forEach、fiter、sum这些常用的功能,本篇我们只讲reduce。

reduce的作用是把stream中的元素给组合起来。至于怎么组合起来:它需要我们首先提供一个起始种子,然后依照某种运算规则使其与stream的第一个元素发生关系产生一个新的种子,这个新的种子再紧接着与stream的第二个元素发生关系产生又一个新的种子,就这样依次递归执行,最后产生的结果就是reduce的最终产出,这就是reduce的算法最通俗的描述;那么结合实际的业务场景来说,运用reduce我们可以做sum,min,max,average,所以这些我们称之为针对具体应用场景的reduce,这些常用的reduce,stream api已经为我们封装了对应的方法。

以下给出一些具体应用场景的reduce实现方式:

sum:

@Testpublic voidtestSum() {

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

@Testpublic voidtestConcat() {//构造字符串流

List strs = Arrays.asList("H", "E", "L", "L", "O");//reduce

String concatReduce = strs.stream().reduce("", String::concat);

System.out.println(concatReduce);

}

min

@Testpublic voidtestMin() {//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

@Testpublic voidtestMax() {//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());

}

————————————————

版权声明:本文为CSDN博主「争夕」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u010221709/article/details/76686146

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值