java 8之函数编程自定义函数接口@FunctionalInterface
什么是函数式接口(Functional Interface)
所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法。
补充下:方法也可以有具体默认实现逻辑,需要用default修饰
这种类型的接口也称为SAM接口,即Single Abstract Method interfaces。
函数式接口用途
它们主要用在Lambda表达式和方法引用(实际上也可认为是Lambda表达式)上。
我会通过个例子介绍具体使用,也是我项目中使用比较常见的用法
先定义一个函数接口
/*** @author zhaoyy* @version 1.0* @description 定义函数接口* @date 2022/4/28**/
@FunctionalInterface
public interface CustomizeFunction<T, R> {/*** Applies this function to the given argument.*/R apply(T t) throws Exception;}
具体实现函数接口CustomizeFunctionImpl,CustomizeFunctionImpl2
/*** @author zhaoyy* @version 1.0* @description 函数接口实习 1* @date 2022/4/29**/
public class CustomizeFunctionImpl implements CustomizeFunction {@Overridepublic Object apply(Object o) throws Exception {return Integer.valueOf(o.toString()) + 1;}
}
/*** @author zhaoyy* @version 1.0* @description 函数接口实现2* @date 2022/4/29**/
public class CustomizeFunctionImpl2 implements CustomizeFunction {@Overridepublic Object apply(Object o) throws Exception {return Integer.valueOf(o.toString()) + 2;}
}
测试函数main方法
import java.util.ArrayList;
import java.util.List;/*** @author zhaoyy* @version 1.0* @description 测试自定义函数main* @date 2022/4/28**/
public class CustomizeFunctionTest {public static void main(String[] args) throws Exception {CustomizeFunction<Integer, Integer> function = (x) -> 1 + x;Integer result = function.apply(3);System.out.println("==========自定义函数============");System.out.println(result);CustomizeFunction<Integer, Integer> function2 =CustomizeFunctionTest::add;Integer rep = function2.apply(3);System.out.println("==========自定义函数调用方法============");System.out.println(rep);System.out.println("======自定义函数方法继承方法重写================");List<CustomizeFunction<Integer, Integer>> list = new ArrayList<>();list.add(new CustomizeFunctionImpl());list.add(new CustomizeFunctionImpl2());int index = 5;for (CustomizeFunction<Integer, Integer> extractorFunction : list) {Integer res = extractorFunction.apply(index);System.out.println(res);}}public static Integer add(Integer x){return 1 + x;}
}
结果输出:
==========自定义函数============
4
==========自定义函数调用方法============
4
======自定义函数方法继承方法重写================
6
7Process finished with exit code 0
测试案例说明:
1.首先我们创建了一个接口CustomizeFunction 使用函数注解:@FunctionalInterface 。参数说明:R返回对象,T入参对象,只有一个方法apply().
2.实现类CustomizeFunctionImpl,CustomizeFunctionImpl2分别对函数CustomizeFunction 中的apply()方法重写,具体按详细类方法,一个是对入参加1,一个是对入参加2并返回计算完结果
3.CustomizeFunctionTest输出第一值:4,通过Lambda 表达式计算并返回数据(x) -> 1 + x 对入参加1,第二个输出,调用的是类方法通过lambda 表达式,与第一个输出同等只是做了方法抽离。第三个输出,分别调用具体实现方法逻辑计算返回数据。
java 8之函数编程自定义函数接口@FunctionalInterface相关推荐
- java juel表达式_activiti 自定义函数解析juel表达式
activiti是支持juel表达式的,这个也很好用,但实际过程中需要支持类方法及变量. 原来项目中解析juel,这边有自定义一个方法的 代码如下: public String getStringBy ...
- java函数式 new_java8简单入门--函数式接口 @FunctionalInterface
1.介绍 看了几篇关于 java8 入门的例子,其中引入了许多令人期待已久的特性(虽然我没有过这样的体会),但不管你的代码是普通青年款还是文艺青年款,你都可以从被 java8 的重新组织的代码看到她的 ...
- java中函数是什么_[一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念...
本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的函数 看 ...
- 还看不懂同事的代码?Lambda 表达式、函数接口了解一下
本文经授权转载自微信公众号:未读代码 Java 8 早已经在2014 年 3月 18日发布,毫无疑问 Java 8 对 Java 来说绝对算得上是一次重大版本更新,它包含了十多项语言.库.工具.JVM ...
- [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念...
本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的函数 ...
- windows下mysql 自定义函数 之http 实操
有没有遇到这种场景呢,当使用mysql做复杂字符串处理的时候总感觉mysql内置的函数不够用呢.比如做字符串切割,解析xml等.而这个时候你恰恰对编写mysql函数或者存储过程缺乏一定的经验积累.而你 ...
- 皕杰报表自定义扩展~自定义函数
皕杰报表工具中提供了170多个函数和操作符,基本能满足设计大部分报表的需求,遇到特殊情况,设计器里的函数不能满足需求时,就需要自定义一些函数来来满足你的需求. 1.皕杰报表自定义函数的类型: 自定义函 ...
- 【C 语言】字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )
文章目录 前言 一.业务子函数接口定义要点 二.完整代码示例 前言 字符串开发模型 : strstr-while/do-while 模型 : 在 字符串 中 查找 子串特征 ; 两头堵模型 : 两个指 ...
- spark自定义函数
1.使用java,scala或者python等都可以编写自定义函数,编写完成后通过spark.udf函数注册即可使用 2.spark也支持hive自定义函数,使用类似create temporary ...
最新文章
- 计算两个日期之间的工作日
- 课后练习----实现窗口的切换
- spring 配置声明式事务 疯狂JAVA
- SAP成都研究院大卫哥:SAP C4C中国本地化之微信小程序集成
- ExtJs5.0在WebStorm上的使用之入门教程(一)编写第一个网页 HelloExt
- go语言 expected ; found a
- 点击编辑,进入编辑页面并把值渲染到页面上
- 图片自适应div比例缩放上下左右居中
- 热烈祝贺:关于OpenJDK8 LINUX版本输入法候选框不能跟随光标移动的BUG及解决办法,已上报Oracle
- c++ string split_闲话Python之砍瓜切菜split()
- 记录一次线上mysql事务隔离级别引发的思考
- 数据可视化BI平台--CBoard的使用
- 一拳超人手游显示服务器断开,一拳超人最强之男游戏无法登陆怎么办 解决方案一览...
- TM1620 LED 驱动控制 程序
- 真正的英雄(罗纳德·里根在“挑战者号”航天飞机失事后的演讲词)
- FPGA初学者__个人学习笔记(二)_ generate 用法
- Swagger导出pdf文档
- IOS11更新教程大分享(附带降级教程)
- 没想到国美竟然用oracle的团队来搭建电商平台
- 从事网络安全,可以考取什么证书?
热门文章
- oracle基础|oracle多表查询用法|什么是等值连接(inner join)|什么是不等值连接(between)|什么是左连接(left join)|什么是右连接(right join)
- 《不可思议的年代》读书笔记
- go get connectex: A connection attempt failed because the connected party did not properly respond
- 石油团队赛热身赛----问题 A: Magic Mirror,问题 I: Save the Room,问题 G: Give Candies
- 《高效能人士的7个习惯》-知彼解己
- 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展... 1
- no-cache,max-age=0,nostore区别及304原理
- 互联网及其应用——第一章 互联网概述
- 基于ngx-rtmp-module模块http-flv直播流的实现
- 3706 teradata 语句报错_TERADATA中函数的使用