Java 8 Supplier函数式接口介绍及实战案例

介绍直接看这篇文章比较详细:【Java 基础篇】Java Supplier 接口详解

Supplier 是 Java 8 引入的一个函数式接口,它属于 java.util.function 包。Supplier 接口表示一个不接受任何参数但返回某种类型结果值的函数。它定义了一个 get() 方法,该方法没有参数,但返回一个泛型 T 类型的值。

Supplier 接口常用于以下场景:

延迟计算或生成值: 在某些情况下,你可能希望只有在真正需要结果时才进行计算或生成值。使用 Supplier,你可以将计算或生成值的逻辑封装在 get() 方法中,并在需要时调用它。
提供默认值: 当某个方法需要返回一个值时,但此时没有合适的值可返回时,可以使用 Supplier 来提供一个默认值。
与 Stream API 结合使用: 在 Java 8 的 Stream API 中,Supplier 可以与 Stream.generate() 方法一起使用,以生成一个无限流,其中每个元素都是通过调用 Supplier 的 get() 方法获得的。


实战中的使用:

例如有方法如下

    public long nextId(){
        if (enabled.get()) {
            return idGen.nextId();
        }
        throw new ForbidOperationException(ErrorCode.FORBID_GENERATE_SEQRULE_EXCEPTION);
    }

    public String nextCode(Map<String, String> params){
        return CodeGenerator.getInstance().create(ruleId, nextId(), callBackTime(), params);
    }

nextCode()方法中,传入的参数有nextId()方法返回的结果。但实际场景中,我希望nextId()方法能在CodeGenerator.getInstance().create执行中途再执行而不是传入参数前执行(有数据校验问题),就可以用到Supplier函数式接口其中针对long类型返回值的LongSupplier接口,以实现其提供的延迟计算或生成值功能

改造后的代码:

    public String nextCode(Map<String, String> params) {
        LongSupplier func = new LongSupplier() {
            @Override
            public long getAsLong() {
                return nextId();
            }
        };
        return CodeGenerator.getInstance().create(ruleId, func, callBackTime(), params);
    }

用lambda表达式进一步改造:

    public String nextCode(Map<String, String> params) {
        LongSupplier func = this::nextId;
        return CodeGenerator.getInstance().create(ruleId, func, callBackTime(), params);
    }

之后在CodeGenerator.getInstance().create方法里就可以在合适的地方使用func.getAsLong()进行调用了

在这里插入图片描述


最近新项目提测阶段已经连续加班两个多月了,天天弄到23点,顶不住呀,好久没更新文章了,过段时间忙完了应该就会恢复更新了。

THX bros

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

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

相关文章

HAProxy系列文章二《Patroni+ETCD+PG14+HAProxy的安装部署》

瀚高数据库 目录 文档用途 详细信息 文档用途 本文主要介绍Patroni架构下单点HAProxy的安装部署&#xff0c;通过单点HAProxy实现数据库的负载均衡。本文为HAProxy系列文章之一&#xff0c;其他相关文章请点击文档下方的相关文档链接进行详细查看&#xff0c;文章内不在赘述。…

Matlab进阶绘图第54期—密度散点图(概率密度版)

在之前的文章中&#xff0c;分享过Matlab密度散点图的绘制方法&#xff1a; 此版内容用到了一些点云数据处理中求取密度的知识&#xff0c;对部分人来说&#xff0c;可能有些不好理解。 于是&#xff0c;本期内容使用Matlab自带的ksdensity函数进行密度散点图(概率密度版)的绘…

VMware 不能拍摄快照

问题&#xff1a; 拍摄快照后&#xff0c;会出现这个弹窗&#xff0c;然后虚拟机就直接自动退出了&#xff0c;还会弹出一个框&#xff1a; 解决方法&#xff1a; 我用的是 window11 和 VMware16.0.0 这是因为VM16与window11&#xff0c;二者之间版本不兼容问题&#xff0c;可…

麒麟 V10 安装docker2

1. 查看系统版本 2.安装docker-ce 添加源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装docker yum install docker-ce --allowerasing 重启docker systemctl start docker 3.安装nvidia-container-runtime 添…

又一款爆火AI游戏诞生!《换你来当爹》做对了什么?| ShowMeAI体验报告

社区里几百人玩一款AI游戏的场面&#xff0c;值得记录一下&#xff01; 大模型游戏化极度看重〖有趣〗程度。 可有趣的灵魂那么难得&#xff0c;以至于只要一眼&#xff0c;我们就在产品的海洋里发现了 ta 。 1. 有趣的灵魂在发疯疯疯 《换你来当爹》是一款全员发疯的AI游戏&am…

VMware Workstation Pro 和 Fusion Pro 针对个人用户使用免费了

今早看到 VMware by Broadcom 官方博客 VMware Desktop Hypervisor Pro Apps Now Available for Personal Use - VMware Cloud Foundation (VCF) Blog 以及 Learn more about VMware Desktop Hypervisor Products Subscription Model 总结如下&#xff1a; 免费 Player 版本将…

霸道龙尊短视频:成都鼎茂宏升文化传媒公司

霸道龙尊短视频&#xff1a;龙族的传奇与现代的交融 在数字化时代的浪潮中&#xff0c;短视频以其短小精悍、内容丰富的特点&#xff0c;迅速占领了人们的碎片时间。成都鼎茂宏升文化传媒公司而在这些短视频中&#xff0c;一股独特的“霸道龙尊”风潮正在悄然兴起&#xff0c;…

Pytharm2020安装详细教程

Pytharm2020版提取链接链接&#xff1a; https://pan.baidu.com/s/1eDvwYmUJ4l7kIBXewtN4EA?pwd1111 提取码&#xff1a;1111 演示版本为2019版&#xff0c;链接包为2020版pytharm。 1.双击exe文件页面会提示更改选项&#xff0c;点击“是”。 2.点击下一步next 自…

3. C++入门:引用

引用 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。 int main() {int a 1;int b a;int& c a; }创建一个a变量&#xff0c;把1赋值给a 新创建一个b变…

YoLov9目标检测算法的使用

目录 一、环境安装 1、创建虚拟环境 2、安装依赖库 二、数据集准备 1、数据集的文件名 2、划分数据集 3、配置数据文件 4、修改模型结构文件的类别 5、下载模型预训练权重 三、训练 1、训练的三个文件介绍 2、训练 3、验证 4、检测单张图片 四、附录 1、训练参…

AWS基础之Region/AZ/DC概念

从云厂商提供的服务物理地域上来划分&#xff0c;范围从大到小依次是Region-Available Zone-Data Center。 Region(区域)&#xff1a;区域与区域之间的距离大概是几百公里或者几千公里。&#xff08;可以理解为&#xff1a;中国和美国在不同的区域&#xff09; Available Zon…

量化交易策略:经典量化交易策略大汇总(内附开通方法)

01、什么是量化交易&#xff1f; 量化交易是一种依赖于先进的数学模型和计算机技术的交易方式&#xff0c;旨在制定能带来超额收益的多种“大概率”事件策略。 这个过程从大量的历史数据中筛选&#xff0c;极大地减少了投资者情绪波动的影响&#xff0c;避免了在市场极度狂热或…

海外住宅IP介绍

住宅IP&#xff0c;通俗的来讲就是分配给家庭的IP地址&#xff0c;ISP默认分配用户为家庭用户&#xff0c;其真实性与安全性都有一定保障。海外住宅IP是指由海外互联网服务提供商分配给家庭用户的IP地址&#xff0c;IP地址通常是静态的&#xff0c;稳定的&#xff0c;可以为用户…

第二证券今日投资参考:美宣布对华电动汽车等加征关税 AI应用或加速落地

昨日&#xff0c;两市股指早盘一度拉升&#xff0c;随后震动回落&#xff0c;盘中保持窄幅震动收拾走势。截至收盘&#xff0c;沪指微跌0.07%报3145.77点&#xff0c;深证成指跌0.05%报9668.73点&#xff0c;创业板指跌0.26%报1855.6点&#xff0c;北证50指数涨0.74%&#xff1…

python将两张图片对齐

目录 需要对齐的照片如下&#xff1a; 源码&#xff1a; 结果&#xff1a; 需要对齐的照片如下&#xff1a; 源码&#xff1a; import cv2 import numpy as np from matplotlib import pyplot as plt# 读取两张图片 imgA cv2.imread(./out/out/3.png) imgB cv2.imread(./…

高德地图简单复制操作两分钟就能有近10元的收益日入500+无上限

嘿&#xff0c;伙计们&#xff0c;今天我要告诉你们一个赚钱的好方法&#xff0c;这个方法真的很简单&#xff0c;而且你可以在家里就能操作&#xff0c;不需要出门&#xff0c;不需要见人&#xff0c;只需要你会复制粘贴就行了&#xff0c;是不是很吸引人&#xff1f;好&#…

FullCalendar日历组件集成实战(5)

背景 有一些应用系统或应用功能&#xff0c;如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件&#xff0c;但功能比较简单&#xff0c;用来做数据展现勉强可用。但如果需要进行复杂的数据展示&#xff0c;以及互动操作如通过点击添加事件&#xff0…

摆脱手工录入烦恼,OCR技术大幅提高增值税发票处理效率

最近&#xff0c;我邂逅了一位得力助手——OCR技术&#xff0c;它犹如一位神通广大的魔法师&#xff0c;为增值税发票处理带来了翻天覆地的变革&#xff01; 曾几何时&#xff0c;处理增值税发票如同走进了一片迷雾重重的森林&#xff0c;每一步都小心翼翼&#xff0c;生怕出错…

AI绘画进阶工具ComfyUI 傻瓜整合包安装教程!模型共享,一键安装!

哈喽大家好&#xff0c;今天给大家分享一下AI绘画工具Stable Diffusion的另一种UI界面&#xff0c;常见的有&#xff1a; 窗口式界面的WebUI 节点式工作流的ComfyUI ComfyUI更加进阶一些&#xff0c;是一个节点式工作流的AI绘画界面&#xff0c;它高度可定制、自定义编辑Ai生…

数据结构_链表基本操作的实现_代码_例题

一、基本操作实现 1.按位序插入&#xff08;带头节点&#xff09; 2.按位序插入&#xff08;不带头节点&#xff09; 3.指定结点的后插操作 4.指定结点的前插操作 5.按位序删除&#xff08;带头节点&#xff09; 6.指定结点的删除 7.按位查找&#xff0c;返回第i个元素&…