Collectors.reducing总结

1. 方法签名 一个参数

public static <T> Collector<T, ?, Optional<T>> reducing(BinaryOperator<T> op)

参数说明

  • BinaryOperator op 归集操作函数 输入参数T返回T

测试代码

我们这里实现一个简单的求和功能,代码如下

//author: herbert 公众号:小院不小 20210827
@Test
public void testReducingOne() {
List<Integer> testData = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
Optional<Integer> sum = testData.stream().collect(Collectors.reducing((prev, cur) -> {
System.out.println("prev=>" + prev + "cur=>" + cur);
return prev + cur;
}));
System.out.print(sum.get()); // 45
}

2. 方法签名 两个参数

public static <T> Collector<T, ?, T> reducing(T identity, BinaryOperator<T> op)

参数说明

  • T identity 返回类型T初始值
  • BinaryOperator op 归集操作函数 输入参数T返回T

测试代码

我们这里实现一个简单的求和并加上20功能,代码如下

//author: herbert 公众号:小院不小 20210827
@Test
public void testReducingTwo() {
List<Integer> testData = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
Integer sum = testData.stream().collect(Collectors.reducing(20, (prev, cur) -> {
System.out.println("prev=>" + prev + "cur=>" + cur);
return prev + cur;
}));
System.out.print(sum); //65
}

2. 方法签名 三个参数

public static <T, U> Collector<T, ?, U> reducing(U identity,Function<? super T, ? extends U> mapper,BinaryOperator<U> op)

这个函数才是真正体现reducing(归集)的过程。调用者要明确知道以下三个点

  1. 需要转换类型的初始值
  2. 类型如何转换
  3. 如何收集返回值

参数说明

  • U identity 最终返回类型U初始值
  • Function<? super T, ? extends U> mapper 将输入参数T转换成返回类型U的函数
  • BinaryOperator<U> op 归集操作函数 输入参数U返回U

测试代码

我们这里实现一个简单数字转字符串并按逗号连接的功能,代码如下

//author: herbert 公众号:小院不小 20210827
@Test
public void testReducingThree() {
List<Integer> testData = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
String joinStr = testData.stream().collect(Collectors.reducing("转换成字符串", in -> {
return in + "";
}, (perv, cur) -> {
return perv + "," + cur;
}));
System.out.print(joinStr); // 转换成字符串,1,2,3,4,5,6,7,8,9
}

4. 总结

这个知识点很小,但在没有彻底明白之前,对三个参数的调用特别糊涂。最主要的原因就是看到一堆 T R U 的泛型类型就不知道如何下手。欢迎大家关注我的公众号一起收集开发中遇到的点滴知识

Collectors.reducing总结的更多相关文章

  1. Java基础系列-Collector和Collectors

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/10748925.html 一.概述 Collector是专门用来作为Stream的coll ...

  2. JDK1.8新特性——Collector接口和Collectors工具类

    JDK1.8新特性——Collector接口和Collectors工具类 摘要:本文主要学习了在Java1.8中新增的Collector接口和Collectors工具类,以及使用它们在处理集合时的改进 ...

  3. jdk1.8 -- Collectors 的使用

    package com.collector; import java.util.ArrayList; import java.util.Arrays; import java.util.Collect ...

  4. Java 8 Stream 的终极技巧——Collectors 操作

    1. 前言 昨天在 Collection移除元素操作 相关的文章中提到了 Collectors .相信很多同学对这个比较感兴趣,那我们今天就来研究一下 Collectors . 2. Collecto ...

  5. Collectors工具类

    Collector是专门用来作为Stream的collect方法的参数的:而Collectors是作为生产具体Collector的工具类. Collectors是一个工具类,是JDK预实现Collec ...

  6. Lambda--Optional、Collectors高级进阶方法

    Lambda--Collectors.optional高级使用 偶然看到了同事groupingBy用法,然后百度衍生出了optional,collectors,map等各种用法.突然发现自己之前写的代 ...

  7. 【Java 基础】Collectors 使用小结

    Collectors 与集合转换 Collectors toList streamArr.collect(Collectors.toList()); List<Integer> colle ...

  8. Java8 如何进行stream reduce,collection操作

    Java8 如何进行stream reduce,collection操作 2014-07-16 16:42 佚名 oschina 字号:T | T 在java8 JDK包含许多聚合操作(如平均值,总和 ...

  9. JDK1.8聚合操作

    在java8 JDK包含许多聚合操作(如平均值,总和,最小,最大,和计数),返回一个计算流stream的聚合结果.这些聚合操作被称为聚合操作.JDK除返回单个值的聚合操作外,还有很多聚合操作返回一个c ...

随机推荐

  1. 路由算法(Dijkstra算法以及遗传算法)

    (1)Dijkstra算法 1 class Dijkstra(Algorithm): 2 """Dijkstra algorithm for unicast route ...

  2. C语言:伪代码

    伪代码(Pseudocode)是一种算法描述语言.使用伪代码的目的是为了使被描述的算法可以容易地以任何一种编程语言(C, Java, Pascal)实现.因此,伪代码必须结构清晰,代码简单,可读性好, ...

  3. [刘阳Java]_Spring AOP注解详细介绍_第8讲

    这节内容非常关键,我们会比较详细地介绍Spring AOP注解的使用 1. 要使用Spring AOP注解,必须满足如下的事项 导入Aspectj的jar.Spring3.0-AOP.jar.aopa ...

  4. maven添加阿里云镜像

    apache的maven服务器国内访问太慢了,用阿里的镜像会好很多. 1.maven的配置文件有两个,安装目录conf文件夹下settings.xml和用户目录.m2文件夹下的settings.xml ...

  5. Python (paramiko) 连接Linux服务器

    目录 参考资料 Paramiko 安装 连接Linux 文件上传/下载 文件封装 其他 参考资料 https://www.liujiangblog.com/blog/15/ https://blog. ...

  6. vue tab实现右定位

    呈现效果 利用v-if进行判断,登页面完全加载完毕后,显示tab页, 利用name标签,实现选择哪个tab <template> <el-tabs v-if="displa ...

  7. Drupal < 7.32 “Drupalgeddon” SQL注入漏洞(CVE-2014-3704)

    影响版本Drupal < 7.32

  8. Couchdb 任意命令执行漏洞(CVE-2017-12636)

    影响版本:小于 1.7.0 以及 小于 2.1.1 该漏洞是需要登录用户方可触发,如果不知道目标管理员密码,可以利用CVE-2017-12635先增加一个管理员用户 依次执行如下请求即可触发任意命令执 ...

  9. 深度强化学习中稀疏奖励问题Sparse Reward

    Sparse Reward 推荐资料 <深度强化学习中稀疏奖励问题研究综述>1 李宏毅深度强化学习Sparse Reward4 ​ 强化学习算法在被引入深度神经网络后,对大量样本的需求更加 ...

  10. Git,Linux,Ubuntu,Tmux的常用命令

    常用的连接 Git命令 廖雪峰的Git教程 Git常用命令 ubuntu16.04之GitHub入门教程 Linux相关 tmux命令 Ubuntu常用命令速查手册 Linux 命令大全 其它工具 M ...