Java函数式编程入门之Function<T,R>接口
刘盾 原创文章 于 2022-09-24
先抛出一个问题:
Java中可以像JavaScript那样,把一个函数直接当做参数来传递吗?
从Java 8开始,是可以的。在Java提供的函数式编程接口中,Function<T,R>接口的作用的是用来表现一个参数类型为T、返回值类型为R的函数(方法)。下面,以加密功能举例,实现Java中把函数作为参数进行传递的效果。
1.声明方法
首先,我们来声明一个参数类型为函数的文本加密方法。该方法从控制台接收输入的字符串,调用传入的加密函数进行加密,并返回。
注意这个方法的参数,是Function<String,String>,说明可以传入的参数是一个函数,函数的参数是String,返回值也是String类型。
/*** 对控制台文本进行加密的方法* @param signer 传入的加密函数* @return 加密之后的密文*/
protected static String sign(Function<String, String> signer) {System.out.println("请输入要加密的字串:");String str = new Scanner(System.in).next();return signer.apply(str);
}
2.调用方法并传入一个函数(方式1)
声明一个基于MD5算法的加密函数md5Sign,在main方法中调用sign方法并传入这个加密函数。
/*** md5加密函数* @param signStr 要加密的明文* @return 加密后的密文*/
protected static String md5Sign(String signStr) {MessageDigest md5 = null;try {md5 = MessageDigest.getInstance("md5");} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return new String(md5.digest(signStr.getBytes()));
}public static void main(String[] args)throws Exception {String result = sign(FunctionTest::md5Sign);System.out.println("加密后:"+result);
}
3.调用方法并传入一个函数(方式2)
上面的方式把要传入的函数单独进行了声明,但是如果代码不多,可以省略声明,而是在调用的时候直接传入,这种语法叫Lambda表达式。Lambda表达式也可以看做是一种匿名函数。
Lambda表达式分为三个部分:(形参) -> {函数体代码},整个表达式其实就是一个函数。第一部分,形参如果只有一个,()可以省略;第二部分是一个箭头,是固定要写的;第三部分是代码,如果代码只有一行,{}可以省略。
public static void main(String[] args){String result = sign(str -> { //Lambda表达式从从str -> 这里开始 try {return new String(MessageDigest.getInstance("md5").digest(str.getBytes()));} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return null;}); //Lambda表达式在}这里结束System.out.println("加密后:"+result);
}
Java函数式编程入门之Function<T,R>接口相关推荐
- Java 函数式编程入门
Java 函数式编程入门 函数式编程实战 改进 完整代码 像 JavaScript 这种语言很早就支持闭包了,虽然 C++ 很早就有了函数指针,Java 也很早就提供了反射中的 Method 类, ...
- java函数式编程入门
以前写过一篇java8的流操作,人们都说流操作是函数式编程,但函数式编程是什么呢? 什么是函数式编程 什么是函数式编程?它是一种编程范式,即一切都是数学函数.函数式编程语言里也可以有对象,但通常这些对 ...
- java函数式编程:四大Function
java.util.function包下的四大Function 函数式编程为jdk1.8新特性,学习好利用好,编程变得更加美好~ 1. Consumer 消费者 public interface Co ...
- java函数式编程接口Function<T,R>实现数据转换
java.util.function.Function<T,R>接口用来根据一个类型的数据得到另一个类型的数据, 前者称为前置条件,后者称为后置条件. 1. apply方法应用 Funct ...
- java 函数式编程_Java函数式编程:Javaslang入门
java 函数式编程 Java是一门古老的语言,并且该领域中有很多新手在他们自己的领域(JVM)上挑战Java. 但是Java 8到来并带来了一些有趣的功能. 这些有趣的功能使编写新的惊人框架(例如S ...
- java 函数式编程 示例_功能Java示例 第8部分–更多纯函数
java 函数式编程 示例 这是第8部分,该系列的最后一部分称为"示例功能Java". 我在本系列的每个部分中开发的示例是某种"提要处理程序",用于处理文档. ...
- 编程范式 —— 函数式编程入门
该系列会有 3 篇文章,分别介绍什么是函数式编程.剖析函数式编程库.以及函数式编程在 React 中的应用,欢迎关注我的 blog 命令式编程和声明式编程 拿泡茶这个事例进行区分命令式编程和声明式编程 ...
- Java函数式编程整理
2019独角兽企业重金招聘Python工程师标准>>> Java函数式编程的第一个作用是可以将匿名类改写成函数式表达式,由系统自动判断类型 我们先定义一个接口 public inte ...
- 0202年了,还没有用上Java函数式编程!!!——Lambda表达式
0202年了,还没有用上Java函数式编程!!!--Lambda表达式 函数式编程是什么 命令式编程(Imperative) 声明式编程(Declarative) 函数式编程(Functional) ...
最新文章
- semantic segmentation 和instance segmentation
- Spring Boot 注册 Servlet 的三种方法,真是太有用了!
- [模板]tarjan求强连通分量
- 交换机三种端口模式Access、Hybrid和Trunk的理解
- 第三次学JAVA再学不好就吃翔(part95)--Collections工具类
- 企业实战_17_MyCat水平扩展_跨分片查询_ER分片
- 在SQL Server中使用sp_WhoIsActive监视活动
- 51nod1417 天堂里的游戏
- django orm与scrapy集成:
- 详介 MQTT 服务器的搭建与客户端连接
- JavaScript prototype原型实现继承
- 关于三栏式布局的几种方式
- 2022超火的微信小说小程序源码-自带安装教程
- 一言不合就想斗图?快用深度学习帮你生成表情包
- 目前流行的装修风格_现在最流行的装修风格是什么 装修风格流行趋势是什么...
- 互联网从此没有 BAT,该来的还是来了!
- Linux 磁盘管理-配额管理-配置用户对磁盘进行指定大小或者文件数量的使用权限
- 舆情指数在哪里可以查到?具体平台与工具参考
- 如何做好网络口碑营销?
- 【异常】Maven提示异常XmlPullParserException: Unrecognised tag: ‘exclusion‘ (position: START_TAG seen
热门文章
- java多态实现动物叫唤_Java 多态 ——一个案例 彻底搞懂它
- 安全(二)— 为什么使用 MD5 存储密码非常危险
- 【owt-server】webrtc agent :js层
- Python学习3:绘制美国队长之盾(拓展)
- Python编程:为世界贡献你的轮子-pipy打包
- ZZULIOJ1033
- IDEA查看maven依赖树,找出冲突jar包,以及 exclusion 冲突的包
- 烟台二中高考2021成绩查询,山东高考成绩公布,来看看烟台各高中的成绩单……...
- php专业软件是什么意思,软件主要是什么的总称
- activiti设计工作流——任务派遣配置