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的更多相关文章

  1. 廖雪峰Java16函数式编程-1Lambda表达式-1Lambda基础

    1. 函数式编程 Java有2类方法: 实例方法:通过实例调用 静态方法:通过类名调用 Java的方法相当于过程式语言的函数 函数式编程(Functional Programing): 把函数作为基本 ...

  2. 廖雪峰Java16函数式编程-2Stream-7其他操作

    1. 排序 Stream<T> sorted(); //按元素默认大小排序(必须实现Comparable接口) Stream<T> sorted(Comparator<? ...

  3. 廖雪峰Java16函数式编程-2Stream-5filter

    1.filter简介 Stream.filter()是一个转换方法,把一个Stream转换为另一个Stream. 所谓filter操作,就是对一个Stream的所有元素进行测试,不满足条件的元素就被过 ...

  4. 廖雪峰Java16函数式编程-2Stream-4map

    1. map()简介 Stream.map()是一个Stream的转换方法,把一个stream转换为另一个Stream,这2个Stream是按照映射函数一一对应的. 所谓map操作,就是把一种操作运算 ...

  5. 廖雪峰Java16函数式编程-2Stream-2创建Stream

    1. 方法1:把一个现有的序列变为Stream,它的元素是固定的 //1.直接通过Stream.of()静态方法传入可变参数进行创建 Stream<Integer> s = Stream. ...

  6. 廖雪峰Java16函数式编程-2Stream-1Stream简介

    1. Stream Java8引入全新的Stream API 位于java.util.stream包 1.1 Stream API不同于java.io的InputStream/OutputStream ...

  7. 廖雪峰Java16函数式编程-1Lambda表达式-3方法引用

    Java8引入了Lambda表达式,可以不必编写FunctionalInterface的实现类,直接写Lambda表达式.除了Lambda表达式,我们还可以直接传入方法引用 方法引用是指:如果某个方法 ...

  8. [python学习篇][廖雪峰][2]函数式编程

    函数名也是变量: >>> f = abs >>> f(-10) 10 然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就 ...

  9. 廖雪峰Java6 IO编程-2input和output-4Filter模式

    1.JDK提供的InputStream分为两类: 直接提供数据的InputStream * FileInputStream:从文件读取 * ServletInputStream:从HTTP请求读取数据 ...

随机推荐

  1. Apache版hadoop编译

    前言  做为大数据入门的基础,hadoop是每个大数据开发人员几乎不可避免的基础,目前hadoop已经发展到3.x.x版本,但当前企业使用的主流还是2.x.x版本,hadoop官网提供了编译后的had ...

  2. python--序列化:json、pickle、shelva

    序列化 数据类型--->str 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 反序列化 str--->数据类型 序列化三大方法:json *** ...

  3. 使用Kettle的命名参数动态执行作业

    关于如何根据传入的不同参数,达到动态运行作业的目的,这里不介绍.只提供一个思路,就是不同的调度进程调度同一个Kettle文件时,传入了不同的参数,从而得到不同的数据. 如下图所示: 1. 先设置参数名 ...

  4. ubuntu phpize 安裝

    php 版本 7.2,所以安裝 php7.2的 sudo apt-get install php7.2-dev 參考 Is is possible to install phpize for PHP7 ...

  5. redis主从和集群搭建

    主从搭建 redis的主从搭建非常简单,打开配置文件6379.conf,只需要将主节点的protected-mode设置为no,然后在从节点配置中加入:slaveof <masterip> ...

  6. 安装memcached报错:If it's already installed, specify its path using --with-libevent=/dir/

    一.安装memcached,执行./configure --prefix=/usr/local/memcached时候报错: 问题:If it's already installed, specify ...

  7. Dart编程运算符

    表达式是一种特殊类型的语句,它计算为一个值.每个表达都由 操作数 - 表示数据 运算符 - 定义如何处理操作数以生成值. 考虑以下表达式 2 + 3.在该表达式中,2和3是操作数,符号+(加号)是 运 ...

  8. 2019.7.3模拟 光影交错(穷举+概率dp)

    题目大意: 每一轮有pl的概率得到正面的牌,pd的概率得到负面的牌,1-pl-pd的概率得到无属性牌. 每一轮过后,都有p的概率结束游戏,1-p的概率开始下一轮. 问期望有多少轮后正面的牌数严格大于负 ...

  9. php注册和登陆与数据库的链接

    注册和登陆其实是从一个表中进行提取和写入数据 1.(1)先建立一个注册页面 1 2 3 4 5 6 7 8 9 <body>         <h1>注册页面</h1&g ...

  10. js基础用法 ,基础语法

    js用法: HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 <body> 和 <head& ...