刘盾 原创文章 于 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>接口相关推荐

  1. Java 函数式编程入门

    Java 函数式编程入门 函数式编程实战 改进 完整代码   像 JavaScript 这种语言很早就支持闭包了,虽然 C++ 很早就有了函数指针,Java 也很早就提供了反射中的 Method 类, ...

  2. java函数式编程入门

    以前写过一篇java8的流操作,人们都说流操作是函数式编程,但函数式编程是什么呢? 什么是函数式编程 什么是函数式编程?它是一种编程范式,即一切都是数学函数.函数式编程语言里也可以有对象,但通常这些对 ...

  3. java函数式编程:四大Function

    java.util.function包下的四大Function 函数式编程为jdk1.8新特性,学习好利用好,编程变得更加美好~ 1. Consumer 消费者 public interface Co ...

  4. java函数式编程接口Function<T,R>实现数据转换

    java.util.function.Function<T,R>接口用来根据一个类型的数据得到另一个类型的数据, 前者称为前置条件,后者称为后置条件. 1. apply方法应用 Funct ...

  5. java 函数式编程_Java函数式编程:Javaslang入门

    java 函数式编程 Java是一门古老的语言,并且该领域中有很多新手在他们自己的领域(JVM)上挑战Java. 但是Java 8到来并带来了一些有趣的功能. 这些有趣的功能使编写新的惊人框架(例如S ...

  6. java 函数式编程 示例_功能Java示例 第8部分–更多纯函数

    java 函数式编程 示例 这是第8部分,该系列的最后一部分称为"示例功能Java". 我在本系列的每个部分中开发的示例是某种"提要处理程序",用于处理文档. ...

  7. 编程范式 —— 函数式编程入门

    该系列会有 3 篇文章,分别介绍什么是函数式编程.剖析函数式编程库.以及函数式编程在 React 中的应用,欢迎关注我的 blog 命令式编程和声明式编程 拿泡茶这个事例进行区分命令式编程和声明式编程 ...

  8. Java函数式编程整理

    2019独角兽企业重金招聘Python工程师标准>>> Java函数式编程的第一个作用是可以将匿名类改写成函数式表达式,由系统自动判断类型 我们先定义一个接口 public inte ...

  9. 0202年了,还没有用上Java函数式编程!!!——Lambda表达式

    0202年了,还没有用上Java函数式编程!!!--Lambda表达式 函数式编程是什么 命令式编程(Imperative) 声明式编程(Declarative) 函数式编程(Functional) ...

最新文章

  1. semantic segmentation 和instance segmentation
  2. Spring Boot 注册 Servlet 的三种方法,真是太有用了!
  3. [模板]tarjan求强连通分量
  4. 交换机三种端口模式Access、Hybrid和Trunk的理解
  5. 第三次学JAVA再学不好就吃翔(part95)--Collections工具类
  6. 企业实战_17_MyCat水平扩展_跨分片查询_ER分片
  7. 在SQL Server中使用sp_WhoIsActive监视活动
  8. 51nod1417 天堂里的游戏
  9. django orm与scrapy集成:
  10. 详介 MQTT 服务器的搭建与客户端连接
  11. JavaScript prototype原型实现继承
  12. 关于三栏式布局的几种方式
  13. 2022超火的微信小说小程序源码-自带安装教程
  14. 一言不合就想斗图?快用深度学习帮你生成表情包
  15. 目前流行的装修风格_现在最流行的装修风格是什么 装修风格流行趋势是什么...
  16. 互联网从此没有 BAT,该来的还是来了!
  17. Linux 磁盘管理-配额管理-配置用户对磁盘进行指定大小或者文件数量的使用权限
  18. 舆情指数在哪里可以查到?具体平台与工具参考
  19. 如何做好网络口碑营销?
  20. 【异常】Maven提示异常XmlPullParserException: Unrecognised tag: ‘exclusion‘ (position: START_TAG seen

热门文章

  1. java多态实现动物叫唤_Java 多态 ——一个案例 彻底搞懂它
  2. 安全(二)— 为什么使用 MD5 存储密码非常危险
  3. 【owt-server】webrtc agent :js层
  4. Python学习3:绘制美国队长之盾(拓展)
  5. Python编程:为世界贡献你的轮子-pipy打包
  6. ZZULIOJ1033
  7. IDEA查看maven依赖树,找出冲突jar包,以及 exclusion 冲突的包
  8. 烟台二中高考2021成绩查询,山东高考成绩公布,来看看烟台各高中的成绩单……...
  9. php专业软件是什么意思,软件主要是什么的总称
  10. activiti设计工作流——任务派遣配置