java接口构造函数_Java8自定义函数式编程接口和便捷的引用类的构造器及方法
什么是函数编程接口?
约束:抽象方法有且只有一个,即不能有多个抽象方法,在接口中覆写Object类中的public方法(如equals),不算是函数式接口的方法。
被@FunctionalInterface注解该接口,没有该注解的接口满足约束也行。
在Java8中,满足下面任意一个条件的接口都是函数式接口:
被@FunctionalInterface注释的接口,满足函数式接口的约束。
没有被@FunctionalInterface注释的接口,但是满足函数式接口的约束。
@函数式的约束:
接口有且只能有个一个抽象方法,只有方法定义,没有方法体。
在接口中覆写Object类中的public方法,不算是函数式接口的方法。
在接口中的default方法,不算是函数式接口的方法。
在接口中的static方法,不算是函数式接口的方法。
自定义一个函数式编程接口
/*** 自定义一个函数式编程接口
* 函数式编程只有一个抽象方法,所以默认的是实现的是这个抽象方法
*@param
*@param*/@FunctionalInterfacepublic interface CalcFunctionInterface{/*** 计算t1和t2
*
*@paramt1
*@paramt2
*@return
*/R calc(T t1, T t2);
}
传入不同calc函数实现的对象,进行调用
相当于以前创建CalcFunctionInterface的匿名类,重写了calc方法(由于只有一个抽象方法,所以默认就是calc方法)
/*** 相当于一个类实现了CalcFunction接口中的唯一一个函数calc
* 然后在利用多态,调用calc函数,传入两个参数,进行计算*/@Testpublic voidadd(){
CalcFunctionInterface add = (t1, t2) -> t1+t2;
Integer calc= add.calc(2, 3);
System.out.println(calc);//5
}
传入一个匿名类对象,进行方法调用calc
@Testpublic voidmultiply(){//相当于通过匿名类的形式传入一个实现了CalcFunctionInterface接口的子类对象,重写了该接口的方法
Integer calc = FunctionalInterfacesTest.calc(2, 3, (t1, t2) -> t1 *t2);
System.out.println(calc);//6
}/*** 接受了一个对象,利用对象的calc方法计算*/
public static Integer calc(Integer i1, Integer i2, CalcFunctionInterfacecalc){returncalc.calc(i1,i2);
}
便捷的引用类的构造器及方法
一个Convert接口
@FunctionalInterfacepublic interface Convert{
T convert(F from);
}
lambda表达式的形式重写该函数式编程的唯一接口
@Testpublic voidtestLambda(){
Convert stringIntegerConvert = (from ->Integer.valueOf(from));
Integer convert= stringIntegerConvert.convert("123");
System.out.println(convert);//123
}
下面使用"::"运算符更精简
静态方法
@Testpublic voidtestStaticMethod(){
Convert stringInstantConvert =Instant::parse;
Instant convert= stringInstantConvert.convert("2019-04-25T16:09:03.852Z");
System.out.println(convert);//2019-04-25T16:09:03.852Z
}
实例方法
/*** 实例对象的方法*/@Testpublic voidtestObjectMethod(){
Something something= newSomething();
Convert startsWith =something::startsWith;
String convert= startsWith.convert("123");
System.out.println(convert);//1
}
classSomething {publicString startsWith(String s) {return String.valueOf(s.charAt(0));
}
}
对象的构造方法
/*** 调用对象的构造方法*/@Testpublic voidtestConstructor(){
PersonFactory personFactory = Person::new;
Person person= personFactory.create("Chris", "Paul");
System.out.println(person);//Person(firstName=Chris, lastName=Paul)
}
/*** Person 工厂*/@FunctionalInterfacepublic interface PersonFactory
{
P create(String firstName, String lastName);
}
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToStringclassPerson {privateString firstName;privateString lastName;
}
Java8的内置函数式编程接口
java接口构造函数_Java8自定义函数式编程接口和便捷的引用类的构造器及方法相关推荐
- predicate java 作用_Java函数式编程接口详解之Predicate
一.初识 Predicate是Java提供的重要的函数编程接口之一,作用主要是用于逻辑判断. 首先看看源码: @FunctionalInterface public interface Predica ...
- 基于C++11模板元编程实现Scheme中的list及相关函数式编程接口
前言 本文将介绍如何使用C++11模板元编程实现Scheme中的list及相关函数式编程接口,如list,cons,car,cdr,length,is_empty,reverse,append,map ...
- Java 8 Lambda表达式的函数式编程– Monads
什么是monad ?: monad是一种设计模式概念,用于大多数功能编程语言(如Lisp)或现代世界的Clojure或Scala中. (实际上,我会从scala复制一些内容.)现在,为什么它在Java ...
- java函数式编程接口Function<T,R>实现数据转换
java.util.function.Function<T,R>接口用来根据一个类型的数据得到另一个类型的数据, 前者称为前置条件,后者称为后置条件. 1. apply方法应用 Funct ...
- java stream 取某个字段_java8的函数式编程和stream使用心得
1:函数式编程 在很多其他的编程语言里面,都可以实现函数式的编程,也就是函数可以作为变量去灵活使用,但是java一直都不可以,之前很多都使用一些匿名内部类这种丑的亚批的代码.java8之后算是可以使用 ...
- 工具技巧和读文档 | 读函数式编程接口文档 | 匿名内部类 | lambda表达式 |IDEA
Function接口,函数式接口 按入参返回值分类,大概分为4种类型,再加上多个入参就又多了Bi开头的两种. 有Ctrl+P的时候不懂参数列表该写啥,就先Ctrl+ALT看下入参类型的相关实现类! 一 ...
- java SSM 框架 微信自定义菜单 快递接口 SpringMVC mybatis redis shiro
A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生 ...
- java SSM 框架 微信自定义菜单 快递接口 SpringMVC mybatis redis shiro ehcache websocket
获取[下载地址] QQ: 313596790 官网 http://www.fhadmin.org/ A 代码编辑器,在线模版编辑,仿开发工具编辑器,pdf在线预览,文件转换编码 B 集成代码生成器 [ ...
- java SSM 框架 微信自定义菜单 快递接口 SpringMVC mybatis redis
获取[下载地址] QQ: 313596790 A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 ...
最新文章
- 【嵌入式Linux】嵌入式Linux驱动开发基础知识之LED驱动框架--面向对象、分层设计思想
- 喜马拉雅音频批量下载
- 寻找春天nbsp;九宫格日记-2011.09.20
- 唯一标识 微信小程序_微信小程序中用户唯一ID的获取
- PID调节参数的作用
- 从高考到程序员——我一直在寻找答案
- 如何修复iPhone、iPad 或 Mac 上的 AirDrop 连接问题?
- 免费PBootCMS采集支持聚合文章采集插件
- PHP 依赖注入 容器,PHP 依赖注入容器 Pimple 笔记
- NPDP知识推送-第一章新产品开发战略(2)
- 2023二建各科资料
- PHP 7.3 新特性介绍
- java当单据变化触发,UAP开发(NC63)遇到的错误记录
- 从技术实现角度看信贷ABS业务(一)
- fiddle简单使用
- 云知梦php视频教程百度云_php学习笔记(里面是自己看云知梦php视频时的思考和笔记)(一)...
- 简单介绍一下常用的几种无位置传感器的控制方式
- linux 发现sata硬盘的过程 命令名码 identify,SATA命令之security
- 蛇年最后一篇以及新春之礼:高效开发视频讲座下载
- 2021年东华高级中学高考成绩查询,东莞市最好的三所高中,成绩一看便知,你知道几所...
热门文章
- 【Redis】Redis 事务
- 【Spring】Spring 中的bean 和我们java中的bean有什么区别以及spring 模拟实现
- 60-170-040-使用-Time-Flink时间系统系列之实例讲解-如何做定时输出
- Elasticsearch 写入优化记录,从3000到8000/s
- 。。。,带着这三点疑问,让我们层层深入的对HTTPS原理进行剖析!
- 转化百分比_localPosition与anchoredPosition的转化关系
- 台式计算机关机后自行重启,台式机电脑总是自动关机重启该怎么解决?
- CentOS 7下设置Docker代理(Linux下Systemd服务的环境变量配置)
- UOJ#386. 【UNR #3】鸽子固定器(链表)
- SpringBoot | 第十四章:基于Docker的简单部署