回调函数实现

案例1:

将集合里面的对象根据不同的时间粒度转为对应的月末,季末,年末

集合里面的对象未知,且字段名称未知,

调用方法:

public static void main(String[] args) {List<InvoicingNewRi> list = new ArrayList<>(16);buildLastDayOfDateLevel(list,DateLevelEnum.MONTH, InvoicingNewRi::getBizDate, (item, num) -> {item.setBizDate(num);});}

回调函数 实现

/*** 将日期转为月末,季末,年末* @param list* @param dateLevelEnum* @param function* @param consumer* @author: e-Yuanhui.Ji* @date: 2023/8/3 17:37*/public static  <T> void buildLastDayOfDateLevel(List<T> list,DateLevelEnum dateLevelEnum, Function<T, LocalDate> function,BiConsumer<T, LocalDate> consumer) {if (DateLevelEnum.DAY.equals(dateLevelEnum)) {return;}for (T t : list) {switch (dateLevelEnum) {case MONTH:LocalDate month =  LocalDateUtil.getLastDayOfMonth(function.apply(t));consumer.accept(t,month);break;case QUARTER:LocalDate quarter =  LocalDateUtil.getLastDayOfQuarter(function.apply(t));consumer.accept(t,quarter);break;case YEAR:LocalDate year =  LocalDateUtil.getLastDayOfYear(function.apply(t));consumer.accept(t,year);break;default:}}}

 ps:此方法最后使用以下方式实现了:

不同日期粒度封装到getLastDayofDateLevel里面进行实现了


list.forEach(item-> item.setBizDate(BusinessUtil.getLastDayOfDateLevel(item.getBizDate(),dateLevelEnum)));

案例2:

对学生的各个学科进行统计,在前10名的单课目上打上厉害标识,在后10名打卡需要加油标识

主方法

public static void main(String[] args) {ArrayList<KljytSummary> list = new ArrayList<>(40);for (int i = 0; i < 15; i++) {list.add(new KljytSummary("张三"+i, 1+i,2+i,3+i,4*i,5*i,6+i,i+i));}// 默认以大定单数builSort(list, KljytSummary::get语文, (item, num) -> {item.set语文排名(num);});builSort(list, KljytSummary::get数学, (item, num) -> {item.set数学排名(num);});builSort(list, KljytSummary::get英语, (item, num) -> {item.set英语排名(num);});builSort(list, KljytSummary::get政治, (item, num) -> {item.set政治排名(num);});builSort(list, KljytSummary::get化学, (item, num) -> {item.set化学排名(num);});builSort(list, KljytSummary::get生物, (item, num) -> {item.set生物排名(num);});builSort(list, KljytSummary::get物理, (item, num) -> {item.set物理排名(num);});list.forEach(System.out::println);}

i学生类

@Data@AllArgsConstructorpublic static class KljytSummary   {public KljytSummary(){}public KljytSummary(String name, Integer 语文, Integer 数学, Integer 英语, Integer 化学, Integer 物理, Integer 生物, Integer 政治) {this.name = name;this.语文 = 语文;this.数学 = 数学;this.英语 = 英语;this.化学 = 化学;this.物理 = 物理;this.生物 = 生物;this.政治 = 政治;}private String name;// 前百分之10在排名里面填入厉害// 后百分之10填入垃圾private Integer 语文;private String 语文排名;private Integer 数学;private String 数学排名;private Integer 英语;private String 英语排名;private Integer 化学;private String 化学排名;private Integer 物理;private String 物理排名;private Integer 生物;private String 生物排名;private Integer 政治;private String 政治排名;}

实现

/*** @param list     遍历的集* @param mapper   得出需要排名的字段* @param consumer 将结果设置到对应的优劣字段中* @author: e-Yuanhui.Ji* @date: 2022/12/13 09:00*/public static void builSort(List<KljytSummary> list, Function<KljytSummary, Integer> mapper,BiConsumer<KljytSummary, String> consumer) {if (CollectionUtils.isEmpty(list)) {return;}list.sort(Comparator.comparingDouble(item -> 0 - mapper.apply(item)));int size = list.size();// 四舍五入long round = Math.round(size * 0.1);// 点赞for (int i = 0; i < round; i++) {KljytSummary kljytSummaryBO = list.get(i);Number apply = mapper.apply(kljytSummaryBO);if (apply != null) {consumer.accept(list.get(i), "厉害");}}// 加油for (int i = size - 1; i >= size - round; i--) {KljytSummary kljytSummaryBO = list.get(i);Number apply = mapper.apply(kljytSummaryBO);if (apply != null) {consumer.accept(list.get(i), "需要加油");}}}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.net 6 efcore一个model映射到多张表(非使用IEntityTypeConfiguration)

现在有两张表&#xff0c;结构一模一样&#xff0c;我又不想创建两个一模一样的model&#xff0c;就想一个model映射到两张表 废话不多说直接上代码 安装依赖包 创建model namespace oneModelMultiTable.Model {public class Test{public int id { get; set; }public string…

“深入解析JVM内部机制:从字节码到垃圾回收“

标题&#xff1a;深入解析JVM内部机制&#xff1a;从字节码到垃圾回收 摘要&#xff1a;本文将从字节码生成、类加载、运行时数据区域和垃圾回收等方面深入解析JVM的内部机制&#xff0c;并通过示例代码展示其工作原理和实践应用。 正文&#xff1a; 一、字节码生成 JVM是基…

面试热题(前中序遍历构建树)

给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 题目中是给定两个数组&#xff0c;一个是存放这颗树的前序遍历的数组&#xff0c;一个是存放这棵树的…

如何把pdf转成cad版本?这种转换方法非常简单

将PDF转换成CAD格式的优势在于&#xff0c;CAD格式通常是用于工程设计和绘图的标准格式。这种格式的文件可以在计算机上进行编辑和修改&#xff0c;而不需要纸质副本。此外&#xff0c;CAD文件通常可以与其他CAD软件进行交互&#xff0c;从而使得工程设计和绘图过程更加高效和精…

Xilinx A7开发板LVDS IO无输出问题解决方法

使用A7-35T FGG484的FPGA开发板bank16上的IO作为差分LVDS的输入输出&#xff0c;搭建输入输出测试工程发现LVDS可以输入、无法输出。查阅UG471&#xff0c;找到如下信息&#xff1a; 手册中已经针对A7的LVDS做了明确的应用说明&#xff1a; &#xff08;1&#xff09;HP bank上…

Mr. Cappuccino的第57杯咖啡——简单手写Mybatis大致原理

简单手写Mybatis大致原理 大致原理项目结构项目代码代码测试 大致原理 底层基于JDK动态代理技术实现 项目结构 项目代码 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns…

笙默考试管理系统-MyExamTest--backBtn

笙默考试管理系统-MyExamTest--backBtn 目录 一、 笙默考试管理系统-MyExamTest--backBtn 二、 笙默考试管理系统-MyExamTest--backBtn 三、 笙默考试管理系统-MyExamTest--backBtn 四、 笙默考试管理系统-MyExamTest--backBtn 五、 笙默考试管理系统-MyExamTest--ba…

SpringBoot统一功能处理(AOP思想实现)(统一用户登录权限验证 / 异常处理 / 数据格式返回)

主要是三个处理&#xff1a; 1、统一用户登录权限验证&#xff1b; 2、统一异常处理&#xff1b; 3、统一数据格式返回。 目录 一、用户登录权限校验 &#x1f345; 1、使用拦截器 &#x1f388; 1.1自定义拦截器 &#x1f388; 1.2 设置自定义拦截器 &#x1f388;创建cont…

一零六七、JVM梳理

JVM&#xff1f; Java虚拟机&#xff0c;可以理解为Java程序的运行环境&#xff0c;可以执行Java字节码&#xff08;Java bytecode&#xff09;并提供了内存管理、垃圾回收、线程管理等功能 java内存区域划分?每块内存中都对应什么? 方法区&#xff1a;类的结构信息、常量池、…

Typescript+vite+sass手把手实现五子棋游戏(放置类)

Typescriptvitesass手把手实现五子棋游戏&#xff08;放置类&#xff09; 下面有图片和gif可能没加载出来 上面有图片和gif可能没加载出来 导言 最近练习Typescript&#xff0c;觉得差不多了&#xff0c;就用这个项目练练手&#xff0c;使用Typescript纯面向对象编程。 开源…

马斯克收购AI.com域名巩固xAI公司地位;如何评估大型语言模型的性能

&#x1f989; AI新闻 &#x1f680; AI拍照小程序妙鸭相机上线商业工作站并邀请摄影师进行内测 摘要&#xff1a;AI拍照小程序妙鸭相机将上线面向商业端的工作站&#xff0c;并邀请摄影师进行模板设计的内测。妙鸭相机希望为行业提供更多生态产品&#xff0c;扩大行业规模&a…

面试总结-2023版

本文受众主要为&#xff0c;互联网技术研发人员。 技术面试一般三面和HRBP面不太会卡人&#xff0c;主要都是停在了一面和二面上。我这次换工作前期主要是一面通过率比较低&#xff0c;后面主要是二面通过低。 总结影响面试通过的几点因素&#xff1a; 是否真的招人&#xf…

在java中如何使用openOffice进行格式转换,word,excel,ppt,pdf互相转换

1.首先需要下载并安装openOffice,下载地址为&#xff1a; Apache OpenOffice download | SourceForge.net 2.安装后&#xff0c;可以测试下是否可用&#xff1b; 3.build.gradle中引入依赖&#xff1a; implementation group: com.artofsolving, name: jodconverter, version:…

vue前端 让年月日 加上23:59:59

yyyy/MM/dd HH:mm:ss 格式 // 获取 lateCreateTime 的原始时间戳 const timestamp new Date(this.queryAO.lateCreateTime).getTime();// 将时间戳转换为指定格式的字符串 const formattedDateTime new Date(timestamp).toLocaleString("zh-CN", {year: "num…

安卓4G核心板开发板_MTK6785/MT6785(Helio G95)安卓手机主板方案

联发科MTK6785&#xff08;Helio G95&#xff09;安卓核心板采用八核 CPU 具有两个强大的 Arm Cortex-A76 处理器内核&#xff0c;主频高达 2.05GHz&#xff0c;外加六个 Cortex-A55 高效处理器。其强大的图形性能由 Arm Mali-G76 MC4 提供&#xff0c;速度可提升至 900MHz 。 …

ubuntu22.04网络配置

背景 之前也用过ubuntu&#xff0c;但是这次使用了ubuntu22&#xff0c;发现网络配置是使用yaml文件来配置的&#xff0c;于是就做了下对比ubuntu16网络配置 # 配置文件在/etc/network/interfaces&#xff0c;默认配置是&#xff1a; auto lo iface lo inet loopback# 网络配…

【云原生】K8S二进制搭建二:部署CNI网络组件

目录 一、K8S提供三大接口1.1容器运行时接口CRI1.2云原生网络接口CNI1.3云原生存储接口CSI 二、Flannel网络插件2.1K8S中Pod网络通信2.2Overlay Network2.3VXLAN2.4Flannel 三、Flannel udp 模式的工作原理3.1ETCD 之 Flannel 提供说明 四、vxlan 模式4.1Flannel vxlan 模式的工…

java.sql.SQLSyntaxErrorException: ORA-00909: 参数个数无效

问题&#xff1a; 在Select里采用Contact(%,#name,%)报错参数个数无效 原因&#xff1a; 回想以前用Mysql的时候就是这样用的&#xff0c;没有问题&#xff0c;在这里就出问题了&#xff0c;所以确定问题在oracle数据库上&#xff0c;经过查询得知&#xff0c;oracle和mysql…

无向图-已知根节点求高度

深搜板子题&#xff0c;无向图&#xff0c;加边加两个&#xff0c;dfs输入两个参数变量&#xff0c;一个是当前深搜节点&#xff0c;另一个是父节点&#xff08;避免重复搜索父节点&#xff09;&#xff0c;恢复现场 ///首先完成数组模拟邻接表#include<iostream> #incl…

记一次 HTTPS 抓包分析和 SNI 的思考

日常听说 HTTPS 是加密协议&#xff0c;那现实中的 HTTPS 流量&#xff0c;是真的完全加密吗&#xff1f; ——答案是&#xff0c;不一定。原因嘛&#xff0c;抓个包就知道了。 我们用 curl 命令触发一下&#xff1a; curl -v https://s-api.37.com.cn/api/xxx * Trying 1…