Java8 函数式编程 @FunctionInterface使用示例

@FunctionInterface

是一个注解,用在接口上面。
接口内部只能有一个方法。
作用: 将函数作为参数传入其它方法。

背景

看如下代码, 发现send1 send2 send3 方法都有共同的代码用于获取参数,唯一不同的是消息发送逻辑不一样。
那么将发送逻辑作为 “参数”, 传给getParam方法,代码就会简洁很多。@FunctionInterface就是用于解决这个问题的。

public Map<String, String> getParam () {// 获取消息模板// 获取消息参数// 获取用户信息Map<String, String> map = new HashMap<>();map.put("template", "111");map.put("param", "111");map.put("userinfo", "111");// 发送消息(有多种不同的实现逻辑,需要调用方自定义发送流程)return map;}public void send1() {Map<String, String> param = getParam();String template = param.get("template");String param1 = param.get("param");String userinfo = param.get("userinfo");// 发送逻辑}public void send2() {Map<String, String> param = getParam();String template = param.get("template");String param1 = param.get("param");String userinfo = param.get("userinfo");// 发送逻辑, send1() 不一样}public void send3() {Map<String, String> param = getParam();String template = param.get("template");String param1 = param.get("param");String userinfo = param.get("userinfo");// 发送逻辑, send2 、send1 不一样}

示例

public void getParam (MessageInterface messageInterface) {// 获取消息模板// 获取消息参数// 获取用户信息String template = "";String param = "";String userinfo = "";// 发送消息(有多种不同的实现逻辑,需要调用方自定义发送流程)messageInterface.sendMsg(template, param, userinfo);}public void send1() {getParam((a, b, c)-> {// 发送逻辑});}public void send2() {getParam((a, b, c)-> {// 发送逻辑});}public void send3() {getParam((a, b, c)-> {// 发送逻辑});}@FunctionalInterfacepublic interface MessageInterface{void sendMsg(String template, String param, String userInfo);        }

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

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

相关文章

吴恩达深度学习 (week1,2)

文章目录 1、神经网络监督学习2、深度学习兴起原因3、深度学习二元分类4、深度学习Logistic 回归5、Logistic 回归损失函数6、深度学习梯度下降法7、深度学习向量法8、Python 中的广播9、上述学习总结10、大作业实现:rocket::rocket:&#xff08;1&#xff09;训练初始数据&…

Matlab进阶绘图第49期—气泡堆叠图

气泡堆叠图是堆叠图与气泡图的组合—在堆叠图每根柱子上方添加大小不同的气泡&#xff0c;用于表示另外一个数据变量&#xff08;如每根柱子各组分的平均值&#xff09;的大小。 本文利用自己制作的BarBubble工具&#xff0c;进行气泡堆叠图的绘制&#xff0c;先来看一下成品效…

代码随想录算法训练营第三十五天| 860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球

题目与题解 860.柠檬水找零 题目链接&#xff1a;860.柠檬水找零 代码随想录题解&#xff1a;​​​​​​​860.柠檬水找零 视频讲解&#xff1a;贪心算法&#xff0c;看上去复杂&#xff0c;其实逻辑都是固定的&#xff01;LeetCode&#xff1a;860.柠檬水找零_哔哩哔哩_bil…

GET请求和POST请求的区别

最为常见的客户端传递参数方式有两种&#xff1a; GET 请求和 POST 请求底层都是基于 TCP/IP 协议实现的&#xff0c;使用二者中的任意一个&#xff0c;都可以实现客户端和服务器端的双向交互。 浏览器地址栏直接输入&#xff1a;一定是GET请求&#xff1b; 超链接&#xff1a;…

从数据采集到可视化展示Node-Red二次开发4G模块

环境监测正逐步迈入数字化、智能化时代。Node-Red作为一种开源流式编程工具&#xff0c;以其强大的数据处理能力和设备集成便捷性&#xff0c;在构建环境监测数据站中发挥着至关重要的作用。钡铼技术支持Node-Red编程开发&#xff0c;支持BLIoTLink软网关和自定义开发非标协议。…

6. TypeScript的枚举类型

在TypeScript中&#xff0c;枚举&#xff08;Enum&#xff09;是一种特殊的数据类型&#xff0c;它允许为一组数值赋予友好的名字。枚举类型在处理一组相关常量时非常有用&#xff0c;比如状态码、方向、月份等。本文将从多个方面深入探讨TypeScript中枚举类型的使用&#xff0…

为什么 MySQL 采用 B+ 树作为索引?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 「为什么 MySQL 采用 B 树作为索引&#xff1f;」这句话&#xff0c;是不是在面试时经常出现。 要解释这个问题&#xff0c;其实不单单要从数据结构的角度出发&#xff0c;还要考虑磁盘 I/O 操作次数&am…

【javaWeb】EL与JSTL

目录 EL表达式&#xff08;Expression Language&#xff09;EL和JSP脚本的区别语法EL操作符EL运算符注意 EL功能EL访问作用域隐式对象示例1&#xff1a;获得应用上下文示例2&#xff1a;获取Cookie对象 JSTL(JavaServerPages Standard Tag Library)JSTL使用步骤JSTL标签分类使用…

【免费题库】华为OD机试 - 单词重量(Java JS Python C C++)

须知 哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 文章目录 须知题目描述输入描述输出描述用例解题思路:Java代码:JS代码:Python代码:C代码:C++代码:题目描述 每个句子由多个单词组成,句子中的每个单词的长度都可能不一样,…

【六 (3)机器学习-机器学习建模步骤/kaggle房价回归实战】

目录 文章导航一、确定问题和目标&#xff1a;1、业务需求分析&#xff1a;2、问题定义&#xff1a;3、目标设定&#xff1a;4、数据可行性评估&#xff1a;5、资源评估&#xff1a;6、风险评估&#xff1a; 二、数据收集&#xff1a;1、明确数据需求2、选择数据来源3、考虑数据…

SpringCloud Alibaba Seata 处理分布式事务

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十八篇&#xff0c;即使用 Seata 处理分布式事务。 二、分布式事务问题 当单体应用被拆分成微服务应用…

实现虚拟机Ubuntu与主机Windows之间的复制粘贴

实现步骤 在虚拟机Ubuntu界面&#xff0c;CtrlAltT&#xff0c;新建一个终端 # 卸载已有的工具 sudo apt-get autoremove open-vm-tools# 安装工具open-vm-tools sudo apt-get install open-vm-tools# 安装open-vm-tools-desktop sudo apt-get install open-vm-tools-desk…

【超简单】基于PaddleSpeech搭建个人语音听写服务

一、【超简单】之基于PaddleSpeech搭建个人语音听写服务 1.需求分析 亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?当您面对成吨的会议录音,着急写会议纪要而不得不愚公移山、人海战术?听的头晕眼花,听的漏洞百出,听的怀疑人生,那么你…

在Android中使用MediaPlayer播放音频和视频

在播放音频中SoundPool是个很好用的类&#xff0c;但是SoundPool只能播放音频&#xff0c;且通常只用来播放较短的音频&#xff0c;这就需要另外的类来实现视频和长音频的播放&#xff0c;那就是MediaPlay 实现MediaPlay的基本步骤是 创建MediaPlay对象调用setDataSource对象…

代码随想录算法训练营Day48|LC198 打家劫舍LC213 打家劫舍IILC337 打家劫舍III

一句话总结&#xff1a;前两题白给&#xff0c;第三题树形DP有点难。 原题链接&#xff1a;198 打家劫舍 滚动数组直接秒了。 class Solution {public int rob(int[] nums) {int n nums.length;int first 0, second nums[0];for (int i 2; i < n; i) {int tmp Math.m…

如何开始用 C++ 写一个光栅化渲染器?

光栅化渲染器是计算机图形学中最基础且广泛应用的一种渲染技术&#xff0c;它将三维模型转化为二维图像。下面我们将逐步介绍如何使用C语言从零开始构建一个简单的光栅化渲染器。 一、理解光栅化渲染原理 光栅化是一种将几何数据&#xff08;如点、线、三角形&#xff09;转换…

电商选品难?那是因为你不会用大数据选品工具…

电商选品之所以难&#xff0c;主要有以下几个方面的原因。电商市场更新换代非常快&#xff0c;新的产品不断涌现&#xff0c;旧的产品可能很快就被淘汰。电商选品紧跟市场趋势&#xff0c;不断调整和更新&#xff0c;这对电商运营市场敏感度和反应速度提出了很高的要求。 电商…

110V降9V1A非隔离降压恒压WT5112

110V降9V1A非隔离降压恒压WT5112 嘿&#xff0c;让我来给你说说这个WT5112控制芯片。这可是个厉害的东西&#xff0c;特别适合用在充电器啊、适配器啊还有LED灯这些地方。它最牛的地方就是能稳稳地控制电压和电流&#xff0c;而且还有个什么原边反馈技术让控制得更准。更酷的是…

MySQL_00001_00000

数据准备 员工表&#xff1a;emp Oracle: create table emp ( empno number(4) not null, ename varchar2(10), job varchar2(9), mgr number(4), hiredate date, sal number(7, 2), comm number(7, 2), deptno number(2) ); insert into em…

数据库讲解---(SQL语句--表的使用)【MySQL版本】

零.前言 数据库讲解&#xff08;MySQL版&#xff09;&#xff08;超详细&#xff09;【第一章】-CSDN博客 数据库-ER图教程_e-r图数据库-CSDN博客 数据库讲解&#xff08;MySQL版&#xff09;&#xff08;超详细&#xff09;【第二章】【上】-CSDN博客 一.SQL概述 1.1SQL简…