廖雪峰Java16函数式编程-2Stream-6reduce
1. 聚合方法
Stream.reduce()是一个Stream的聚合方法:把一个Stream的所有元素聚合成一个结果
例如:
Stream.of(1, 2, 3, 4, 5).count(); //返回元素个数:5
2. reduce简介
reduce接收的对象是BinaryOperator接口,其定义了一个apply方法,负责把上次累加的结果和本次元素进行运算,并且返回累加的结果
Optional<T> reduce(BinaryOperator<T> accumulator)
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T, T, T>{
//Bi操作后:两个输入,两个输出
T apply(T t, T u); //负责把上次累加的结果和本次元素进行运算,并且返回累加的结果
}
例如:
Stream.of(1, 2, 6, 8, 9).reduce((acc, n)->acc+n); //求和运算:26
/*计算过程:
acc=1 //acc默认为第一个元素,也可以指定初始值
acc=acc+n=1+2=3
acc=acc+n=3+6=9
acc=acc+n=9+8=17
acc=acc+n=17+9=26
*/
3.reduce代码示例
import java.util.stream.Stream;
public class StreamReduceSample {
public static void main(String[] args){
int r = Stream.of(1,2,3,4,5,6,7,8,9).reduce((acc, x)->acc*x).get();
System.out.println(r);
int r2 = Stream.of(1,2,3,4,5,6,7,8,9).reduce(100,(acc, x)->acc*x);
System.out.println(r2);
}
}
public class StreamReduceSample2 {
public static void main(String[] args){
String[] array = "Stream API supports functional-style operation".split(" ");
String result = Arrays.stream(array).map(String::toLowerCase).reduce((acc, s)->(acc+"~"+s)).get();
System.out.println(result); //stream~api~supports~functional-style~operation
}
}
4. reduce方法总结:
- 1.将一个Stream的每个元素依次作用于BigFunction,并将结果合并
- 2.reduce是聚合方法
- 3.聚合方法会立刻对Stream进行运算
廖雪峰Java16函数式编程-2Stream-6reduce的更多相关文章
- 廖雪峰Java16函数式编程-1Lambda表达式-1Lambda基础
1. 函数式编程 Java有2类方法: 实例方法:通过实例调用 静态方法:通过类名调用 Java的方法相当于过程式语言的函数 函数式编程(Functional Programing): 把函数作为基本 ...
- 廖雪峰Java16函数式编程-2Stream-7其他操作
1. 排序 Stream<T> sorted(); //按元素默认大小排序(必须实现Comparable接口) Stream<T> sorted(Comparator<? ...
- 廖雪峰Java16函数式编程-2Stream-5filter
1.filter简介 Stream.filter()是一个转换方法,把一个Stream转换为另一个Stream. 所谓filter操作,就是对一个Stream的所有元素进行测试,不满足条件的元素就被过 ...
- 廖雪峰Java16函数式编程-2Stream-4map
1. map()简介 Stream.map()是一个Stream的转换方法,把一个stream转换为另一个Stream,这2个Stream是按照映射函数一一对应的. 所谓map操作,就是把一种操作运算 ...
- 廖雪峰Java16函数式编程-2Stream-2创建Stream
1. 方法1:把一个现有的序列变为Stream,它的元素是固定的 //1.直接通过Stream.of()静态方法传入可变参数进行创建 Stream<Integer> s = Stream. ...
- 廖雪峰Java16函数式编程-2Stream-1Stream简介
1. Stream Java8引入全新的Stream API 位于java.util.stream包 1.1 Stream API不同于java.io的InputStream/OutputStream ...
- 廖雪峰Java16函数式编程-1Lambda表达式-3方法引用
Java8引入了Lambda表达式,可以不必编写FunctionalInterface的实现类,直接写Lambda表达式.除了Lambda表达式,我们还可以直接传入方法引用 方法引用是指:如果某个方法 ...
- [python学习篇][廖雪峰][2]函数式编程
函数名也是变量: >>> f = abs >>> f(-10) 10 然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就 ...
- 廖雪峰Java6 IO编程-2input和output-4Filter模式
1.JDK提供的InputStream分为两类: 直接提供数据的InputStream * FileInputStream:从文件读取 * ServletInputStream:从HTTP请求读取数据 ...
随机推荐
- Unity中对注册表进行修改
问题背景: PC端软件开发,当我在Unity中的PlayerSetting中设置好分辨率,每次打包运行后会记忆上次退出时窗口的分辨率(记忆窗口状态),导致下次打开时不是PlayerSetting中的初 ...
- js 万能判断
console.log(Object.prototype.toString.call(123)) //[object Number] console.log(Object.prototype.toSt ...
- C语言之内存
#include <stdio.h> #include <string.h> ; //全局初始化区 char *p1; //全局未初始化区 int main() { /**** ...
- tomcat之redis
Nginx服务器:[root@nginx ~]# vim /usr/local/nginx/conf/nginx.confupstream tomcat_pool { server 192.168.2 ...
- 使用kubeadm 搭建高可用集群 多master
很快很简单 只要三分钟就能看完 三台服务器 k8s-vip 负载均衡器 k8s-master1 主节点一 k8s-master2 主节点一 官方文档 首先搭建负载均衡器 用的Haproxy yum ...
- Webstorm 、ECMAScript 6 、AngularJS
突然接到一智障询问以上内容,大发善心总结(其实就是CV大法)一下下,希望能帮助某智障.....上干活! WebStorm 刚看到我是懵逼的,但是看到和其他两个在一起,猜想到是前台的一开始以为是前台框架 ...
- Shell脚本 全局变量、局部变量
在不同的作用域中,同名的变量不会相互干涉,就好像 A 班有个叫小明的同学,B 班也有个叫小明的同学,虽然他们都叫小明(对应于变量名),但是由于所在的班级(对应于作用域)不同,所以不会造成混乱.但是如果 ...
- Eureka的表兄弟Zookeeper理论基础
Eureka的表兄弟Zookeeper 简单介绍 Zookeeper是一个开源的分布式应用程序协调服务器,主要功能包括配置维护,域名服务,分布式同步,集群管理等 主要功能简介 一.配置维护 分布式系统 ...
- 【基础】Hint控制语句执行
mysql常用的hint对于经常使用oracle的朋友可能知道,oracle的hint功能种类很多,对于优化sql语句提供了很多方法.同样,在mysql里,也有类似的hint功能.下面介绍一些常用的. ...
- 通过jquery获取页面信息
获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document ...