【Java8系列08】Java8中reducing妙用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 1.什么是 reducing?
    • 2.使用示例?
    • 3.使用优化
    • 4.复杂规约
    • 5.实战应用?

1.什么是 reducing?

在 Java 8 中,Collectors.reducingCollectors类提供的一个强大的工具,用于进行归约操作。它用于将流中的元素按照某种规则进行累积,最终生成一个汇总结果。

Collectors.reducing(identity, op)
  • identity:归约操作的初始值,也是流中没有元素时的默认值。
  • op:一个二元操作符,用于将两个元素结合起来,执行归约操作。

2.使用示例?

下面是一个具体的例子,假设有一个包含整数的列表,我们希望对这些整数求和:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

// 使用Collectors.reducing进行求和
Optional<Integer> sum = numbers.stream()
    .collect(Collectors.reducing((x, y) -> x + y));

// 打印结果
System.out.println("Sum: " + sum.orElse(0));

这个例子中,Collectors.reducing 接受一个 Lambda 表达式 (x, y) -> x + y 作为参数,表示对两个元素执行求和操作。sum 是一个Optional<Integer>,它包含了最终的求和结果。如果流为空,orElse(0) 将返回默认值 0。

3.使用优化

这个例子也可以通过方法引用来简化:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

// 使用方法引用进行求和
int sum = numbers.stream()
    .collect(Collectors.reducing(0, Integer::sum));

// 打印结果
System.out.println("Sum: " + sum);

在这里,Integer::sum 是一个方法引用,表示执行整数求和操作。

4.复杂规约

Collectors.reducing 还可以用于更复杂的归约操作,例如查找最大值或最小值。下面是一个查找最大值的例子:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

// 使用Collectors.reducing查找最大值
Optional<Integer> max = numbers.stream()
    .collect(Collectors.reducing(Integer::max));

// 打印结果
System.out.println("Max: " + max.orElse(0));

在这个例子中,Integer::max 是一个方法引用,表示执行整数的最大值操作。

5.实战应用?

有一个集合 storeReports,希望求不同分组策略下汇总值

  1. 先根据不同的策略进行分组
  2. 在 groupingBy 的内部进行 reducing 操作
  3. new DTO()是初始值
  4. 后面的函数是规约的具体逻辑

reducing实战:

Map<String, DTO> resultMap  = storeReports.stream()
                    .collect(Collectors.groupingBy(storeReportDTO -> isTotal ? storeReportDTO.groupKeyTotal() : storeReportDTO.groupKey(),
                            Collectors.reducing(new DTO(),
                                    (s1, s2) -> new DTO(
                                            s2.getName1(),
                                            s2.getKey(),
                                            s2.getYearName(),
                                            s2.getSeasonName(),
                                            Optional.ofNullable(s1.getSalQty()).orElse(0L) + Optional.ofNullable(s2.getSalQty()).orElse(0L),
                                            BigDecimal.ZERO,
                                            BigDecimal.ZERO,
                                            BigDecimal.ZERO,
                                            s2.getWeekOrMonth(),
                                            s2.getYear()
                                    )
                            )
                    ));

分组

public String groupKey() {
    return year + ":_:" + weekOrMonth + ":_:" + key + ":_:" + yearName + ":_:" + seasonName;
}
public String groupKeyTotal() {
    return year + ":_:" + weekOrMonth + ":_:" + key;
}

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/244651.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

提升团队效率,防止员工飞单私单的秘诀!

在如今竞争激烈的商业环境中&#xff0c;每个企业都追求更高的销售业绩和客户满意度。然而&#xff0c;有些员工可能会利用V信等社交工具进行私下交易&#xff0c;导致公司的利益损失和客户信任的瓦解。所以&#xff0c;如何防止员工飞单私单成为了一个需要解决的问题。 在这里…

喜报丨迪捷软件入选2023年浙江省信息技术应用创新典型案例

12月6日&#xff0c;浙江省经信厅公示了2023年浙江省信息技术应用创新典型案例入围名单。本次案例征集活动&#xff0c;由浙江省经信厅、省密码管理局、工业和信息化部网络安全产业发展中心联合组织开展&#xff0c;共遴选出24个优秀典型解决方案&#xff0c;迪捷软件“基于全数…

单例模式:饿汉模式、懒汉模式

目录 一、什么是单例模式 二、饿汉模式 三、懒汉模式 一、什么是单例模式 单例模式是Java中的设计模式之一&#xff0c;能够保证某个类在程序中只存在唯一一份实例&#xff0c;而不会创建出多个实例 单例模式有很多实现方式&#xff0c;最常见的是饿汉和懒汉两种模式 二、…

KNN朴素贝叶斯(根据已知推测未知)

KNN&#xff08;哲学思想&#xff1a;物以类聚&#xff0c;人以群分&#xff09; KNN算法原理及示例1&#xff1a; 向量化 画点&#xff0c;计算欧式距离&#xff1a; 可行代码展示&#xff1a; #!/usr/bin/python # codingutf-8 ######################################### …

如何在 VeriStand 中设置反射内存通道

环境 硬件 cPCI-5565PIORC 软件 VeriStand 我正在设置我的反射内存 PXI 卡&#xff08;例如 cPCI-5565PIORC&#xff09;。 我可以在我的 PXI 系统之间使用反射内存发送/接收什么&#xff1f; 如何设置我的 PXI 系统之间共享的通道&#xff1f; 使用反射内存&#xff0c;您…

国际语音呼叫中心的工作流程

国际语音呼叫中心的工作流程一般包括以下几个步骤&#xff1a; 1.呼叫分配 当客户拨打企业的客服电话时&#xff0c;国际语音呼叫中心会自动将呼叫分配给示闲的客服代表&#xff0c;或者根据客户的需求&#xff0c;将呼叫转接给相应的客服代表。 2.客服代表接听电话 客服代…

网络小测------

使用软件PT7.0按照上面的拓扑结构建立网络&#xff0c;进行合理配置&#xff0c;使得所有计算机之间能够互相通信。并且修改各交换机的系统名称为&#xff1a;学号_编号&#xff0c;如你的学号为123&#xff0c;交换机Switch0的编号为0&#xff0c;则系统名称为123_0&#xff1…

史上最全的设计模式总结

从七月份开始一直到九月底才看完设计模式&#xff0c;在这个过程中我不敢说我已经掌握了那本书里面的内容&#xff0c;或者说1/5&#xff0c;没能力说也没有资格说。但是结果不重要&#xff0c;重要的是这个过程我的收获&#xff01;主要包括如下几个方面&#xff1a; 1、认识了…

华为OD机试 - 任务最优调度 - 深度优先搜索dfs算法(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路1、题目解读2、解题思路3、具体步骤 五、Java算法源码六、效果展示1、输入2、输出3、说明思路分析执行顺序 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收…

Vue3+Ts项目(Naive UI组件)——创建有图标可伸缩的左边菜单栏

文章目录 安装、配置vue-router1、安装2、main.ts配置3、在App.vue中&#xff0c;渲染路由配置到的组件 创建测试路径页面1、src\views\dashboard\index.vue2、src\views\dashboard\test.vue3、src\views\table\index.vue 配置页面路由1、src\router\modules\dashboard.ts2、sr…

Java-----链表

本篇碎碎念&#xff1a;唐朝诡事录中的西安与洛阳让我想到了&#xff0c;远赴人间惊鸿宴会&#xff0c;一睹人间盛世颜&#xff0c;描绘的就是这两个古都吧&#xff0c;有机会一定要去游览一番 今日份励志文案: 最好的状态就是向自己喜欢的东西一点点靠近 …

基于SSM的OA办公系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

在线免费压缩pdf文件

在线免费压缩pdf文件&#xff0c;不用登陆哦&#xff0c; https://www.ilovepdf.com/ https://online2pdf.com/#

IPIDEA科普大数据企业怎样使用IP代理工具进行数据抓取

相信有很多的朋友都很好奇一件事&#xff0c;一般大数据企业需要拥有海量的数据才能够进行数据分析整理和利用&#xff0c;那么他们都是如何抓取到这么多的数据呢&#xff1f;这些企业在抓取数据时都会使用什么工具&#xff0c;今天就跟大家科普一下。 其实大数据企业在进行数…

uniapp x 相比于其他的开发系统框架怎么样?

首先我们要知道niapp这是一种基于Vue.js开发的跨平台应用框架&#xff0c;可以将同一套代码同时运行在多个平台上&#xff0c;包括iOS、Android、H5等。相比其他开发系统框架&#xff0c;他有什么优点呢&#xff1f;让我们共同探讨一下吧&#xff01; 图片来源&#xff1a;unia…

《数据结构、算法与应用C++语言描述》-最大高度优先左高树-C++实现

左高树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_26maxHblt 定义 (大顶堆和小顶堆)堆结构是一种隐式数据结构(implicit data structure)。用完全二叉树表示的堆在数组中是隐式存储的(即没有明确的指针或其他数据能够用来重塑…

HTML5+CSS3+JS小实例:可拖拽排序的人物列表

实例:可拖拽排序的人物列表 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=…

关东升老师极简系列丛书(由清华大学出版社出版)

极简系列丛书&#xff0c;编程学习新体验 在这个科技日新月异的时代&#xff0c;编程已经成为了一种必备技能。但是面对各种复杂的编程语言&#xff0c;你是否也曾感到过迷茫和困惑&#xff1f;由清华大学出版社出版的“极简系列丛书”就是为了帮助你解决这个问题。 这套丛书…

抖捧自动直播是什么,系统功能讲解

目前有在做实体行业级商家服务的老板 你还在为不会直播&#xff0c;不敢直播而苦恼吗&#xff1f; 你还在为想做直播&#xff0c;但没空开直播而焦灼吗&#xff1f; 今天&#xff0c;你的问题都可以统统解决 实体行业直播必备黑科技&#xff1a;抖捧AI自动直播 只需要一部手…

3号线开通在即, 你的「搭子」找好了吗?

搭子合伙者抱有同样目的的人 “搭子”作为一种新型社交关系和社交方式&#xff0c;正在年轻人当中盛行。 浅于朋友&#xff0c;重于同事&#xff0c; 主打“垂直领域”和“精准陪伴”。 不同场合大家都有专属“搭子”&#xff0c; “周末去孔学堂感受传统文化的研学搭子”“…