Collectors.reducing总结

Collectors.reducing总结

1. 方法签名 一个参数

public static  Collector> reducing(BinaryOperator op)

参数说明

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

测试代码

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

//author: herbert 公众号:小院不小 20210827
    @Test
    public void testReducingOne() {
        List testData = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
        Optional 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  Collector reducing(T identity, BinaryOperator op)

参数说明

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

测试代码

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

//author: herbert 公众号:小院不小 20210827
    @Test
    public void testReducingTwo() {
        List 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  Collector reducing(U identity,Function mapper,BinaryOperator op)

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

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

参数说明

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

测试代码

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

//author: herbert 公众号:小院不小 20210827
    @Test
    public void testReducingThree() {
        List 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总结

Original: https://www.cnblogs.com/yfrs/p/reducing.html
Author: _herbert
Title: Collectors.reducing总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607712/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 使用 CompeletedFuture 实现异步调用

    在我们平时写的项目中,异步调用是一个比较重要的优化手段,在 Java 中,提供了 CompletedFuture 供我们使用,具体实现如下: 例子 假如现在有一个需求,我需要去淘宝…

    Java 2023年6月9日
    067
  • JAVA反射参数传递

    使用Method反射调用函数时,我们通常会遇到以下几种情况: public void test(){ System.out.println(“函数参数:0”…

    Java 2023年5月29日
    067
  • 湘潭大学新生匿名问答网站——解湘 项目总结

    一.开发进度 温馨提示:左下角有音乐播放器 项目首页 大一暑假过半,7月29日建立本地工程文件 其中项目在github上经历七次push(第八次为修改配置文件,防止数据库泄露),但…

    Java 2023年6月7日
    081
  • Tomcat源码分析(一)启动Tomcat源码

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月5日
    0101
  • 如何去官网下载JDK (JDK8 JDK1.8)

    posted @2022-01-12 16:23 戈博折刀 阅读(119 ) 评论() 编辑 Original: https://www.cnblogs.com/libin6505…

    Java 2023年5月30日
    095
  • JDK成长记11:ThreadLocal (上)

    上一节你应该学习了thread的基本知识和源码原理,熟悉了线程的应用场景。这一节来学习下和Thread相关的一个类,ThreadLocal。 什么是ThreadLocal? 什么是…

    Java 2023年6月5日
    099
  • nacos单机,集群安装部署

    nacos单机启动 准备 下载nacos安装包 准备centos环境 (本次测试使用docker) PS C:\Users\Administrator> docker run…

    Java 2023年6月8日
    090
  • java-多线程之间的通信

    线程通信的例子:使用两个线程打印 1-100。线程1, 线程2 交替打印 涉及到的三个方法:* wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。* noti…

    Java 2023年5月29日
    086
  • 踩到一个关于分布式锁的非比寻常的BUG!

    你好呀,我是歪歪。 提到分布式锁,大家一般都会想到 Redis。 想到 Redis,一部分同学会说到 Redisson。 那么说到 Redisson,就不得不掰扯掰扯一下它的&#8…

    Java 2023年6月5日
    065
  • CORS(跨域资源共享)笔记

    0.前言 CORS(Cross-Origin Resource Sharing)是一个用于处理跨域问题的W3C标准,本文将介绍什么是跨域,引起跨域的同源策略,什么是CORS,COR…

    Java 2023年6月9日
    091
  • 初次使用create-react-app

    最近玩了一下React,感觉还挺好玩的,说实话对后端的来说比vue好多了,记得刚学vue的时候是一头雾水; 基础知识暂时后面慢慢说,其实感觉还是挺容易的吧,今天就简单使用一下rea…

    Java 2023年6月6日
    091
  • 数据库篇:mysql事务原理之MVCC视图+锁

    前言 数据库的事务特性 数据并发读写时遇到的一致性问题 mysql事务的隔离级别 MVCC的实现原理 锁和隔离级别 关注公众号,一起交流,微信搜一搜: 潜行前行 1 数据库的事务特…

    Java 2023年6月5日
    0123
  • 建造者模式详解

    建造者模式详解 1.1 建造者模式概述 1.1.1 定义 建造者模式(Builder Pattern)将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示,…

    Java 2023年6月7日
    098
  • 互联网技术部门该如何管理

    一、敏捷开发 1.快速开发、快速迭代。 2.组件式开发,避免重复造轮子。 3.制定代码标准。 4.并行开发,高效配合。 5.单元测试必须覆盖所有核心业务。 二、DevOps流程建立…

    Java 2023年6月16日
    090
  • SpringBoot 优雅配置跨域多种方式及Spring Security跨域访问配置的坑

    前言 最近在做项目的时候,基于前后端分离的权限管理系统,后台使用 Spring Security 作为权限控制管理, 然后在前端接口访问时候涉及到跨域,但我怎么配置跨域也没有生效,…

    Java 2023年6月13日
    0130
  • 三十二张图告诉你,Jenkins构建Spring Boot 有多简单~

    持续原创输出,点击上方蓝字关注我 目录 前言 如何安装Jenkins? 环境准备 开始安装Jenkins 初始化配置 访问首页 输入管理员密码 安装插件 创建管理员 实例配置 配置…

    Java 2023年6月14日
    093
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球