java基础之函数式接口
一、函数式接口在Java中是指:有且仅有一个抽象方法的接口,所以函数式接口就是可以适用于Lambda使用的接口
二、自定义函数式接口
格式:
@FunctionalInterface //该注解可省,一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则将会报错
public interface MyFunctionalInterface {
void myMethod();
}
例子:
public class FunctionalInterfaceTest {
public static void main(String[] args) {
show(()->{
System.out.println("使用lambda表达式执行");
});
}
public static void show(MyFunctionalInterface inner){
inner.method();
}
}
三、使用Lambda作为参数和返回值:如果方法的参数是一个函数式接口类型,那么就可以使用Lambda表达式进行替代。使用Lambda表达式作为方法参数,其实就是使用 函数式接口作为方法参数。
例子:Lambda作为参数
public class FunctionalInterfaceTest {
public static void main(String[] args) {
getThread1(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"....执行");
}
});
getThread2(()->{
System.out.println(Thread.currentThread().getName()+"....执行");
});
}
public static void getThread1(Runnable task){
new Thread(task).start();
}
public static void getThread2(Runnable task){
new Thread(task).start();
}
}
例子:作为返回值
public class ComparatorTest {
//定义一个方法,方法的返回值类型使用函数式接口Comparator
public static Comparator<Integer> getComparator(){
/*
return new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
//降序
return o2 - o1;
}
};
*/
//使用lambda简写
return((o1, o2)-> o2 - o1);
};
public static void main(String[] args) {
Integer[] arr = {1,3,9,2,7,8};
System.out.println("....排序前...."+Arrays.toString(arr));
Arrays.sort(arr,getComparator());
System.out.println("....排序后...."+Arrays.toString(arr));
}
}
四、简单明了例子
public class MyInterfacesTest {
public static void main(String[] args) {
/* getMethod(new MyInterfaces<String>() {
@Override
public int method(String s) {
return s.length();
}
});
*/
//简写方式
getMethod(s -> s.length()); //处理
}
public static void getMethod(MyInterfaces<String> myInterfaces){
int len = myInterfaces.method("HelloWorld"); //传参
System.out.println("该字符串的长度为:"+len);
}
}
java基础之函数式接口的更多相关文章
- 用好JAVA中的函数式接口,轻松从通用代码框架中剥离掉业务定制逻辑
大家好,又见面了. 今天我们一起聊一聊JAVA中的函数式接口.那我们首先要知道啥是函数式接口.它和JAVA中普通的接口有啥区别?其实函数式接口也是一个Interface类,是一种比较特殊的接口类,这个 ...
- Java基础-通过POI接口处理xls
Java基础-通过POI接口处理xls 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Java基础-Collection子接口之Set接口
Java基础-Collection子接口之Set接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 学习Collection接口时,记得Collection中可以存放重复元素,也可 ...
- Java基础-Collection子接口之List接口
Java基础-Collection子接口之List接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们掌握了Collection接口的使用后,再来看看Collection接口中 ...
- 【Java 8】函数式接口(一)—— Functional Interface简介
什么是函数式接口(Functional Interface) 其实之前在讲Lambda表达式的时候提到过,所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法. 这种类型的接 ...
- 《Java基础——抽象与接口》
Java基础--抽象与接口 一.抽象: 规则: 关键字 abstract 修饰的类称为抽象类. 子类通过关键字extends实现继承. 关键字 abstract 修饰的方法称为抽象方法,抽 ...
- 【Java 8】函数式接口(二)—— 四大函数接口介绍
前言 Java8中函数接口有很多,大概有几十个吧,具体究竟是多少我也数不清,所以一开始看的时候感觉一脸懵逼,不过其实根本没那么复杂,毕竟不应该也没必要把一个东西设计的很复杂. 几个单词 在学习了解之前 ...
- Java 8 特性 —— 函数式接口
函数式接口 概述:接口中只有一个抽象方法. 函数式接口,即适用于函数式编程场景的接口.而 Java 中的函数式编程体现就是 Lambda,所以函数式接口就是可以适用于 Lambda 使用的接口.只有确 ...
- Java 之 常用函数式接口
JDK提供了大量常用的函数式接口以丰富Lambda的典型使用场景,它们主要在 java.util.function 包中被提供.下面是最简单的几个接口及使用示例. 一.Supplier 接口 java ...
- Java 中的函数式接口
java.util.function中定义了几组类型的函数式接口以及针对基本数据类型的子接口. Predicate -- 传入一个参数,返回一个bool结果, 方法为boolean test(T t) ...
随机推荐
- Java怎样实现将数据导出为Word文档
文章首发于我的博客:Java怎样实现将数据导出为Word文档 - Liu Zijian's Blog 我们在开发一些系统的时候,例如OA系统,经常能遇到将审批单数据导出为word和excel文档的需求 ...
- Docker基础命令(安装和创建管理容器)
docker ps -a 查看容器 docker inspect c008 使用 inspect 命令查看镜像详细信息,包括制作者.适应架构.各层的数字摘要等.
- 解析mysql奇葩语句
首先看看完整的表如下图 那么看看一个比较奇葩的语句 select * from users where name = 'aa'='bb'这个语句为啥能执行成功以及为什么打印出了除了两个aa之外的所有行 ...
- Golang sync.pool源码解析
Golang sync.pool源码解析 - sync.pool - 是什么 - 怎么用 - demo - 真实世界的使用 - 源码解读-数据结构 - 源码解读-读写流程 - 写流程 - 读流程 - ...
- 探寻SRC漏洞平台
探寻SRC漏洞平台 SRC(Security Researcher Acknowledgement Program)是各大互联网厂商开启的漏洞发现奖励计划,也就是我们常说的漏洞赏金计划(bug bou ...
- CTFHub-RCE漏洞wp
引言 题目共有如下类型 什么是RCE漏洞 RCE漏洞,全称是Remote Code Execution漏洞,翻译成中文就是远程代码执行漏洞.顾名思义,这是一种安全漏洞,允许攻击者在受害者的系统上远程执 ...
- 8款支持 C# 语言的 AI 辅助编程神器,高效编程利器!
前言 在当今这个AI技术日新月异的时代,一股创新的浪潮正席卷着软件开发领域,其中AI辅助编程工具以其独特的魅力脱颖而出,成为了众多开发者不可或缺的得力助手.这些工具不仅能够显著提升开发效率,优化代码质 ...
- 动态编译 Java 的神器 Liquor v1.3.10 发布
Liquor 是一个开源的轻量级 Java 动态编译器(零依赖,40KB),它可以在运行时编译 Java 字符串代码片段.类.方法等. 源码地址:https://gitee.com/noear/liq ...
- Azkaban - [01] 概述
简单的任务调度使用crontab.复杂的任务调度使用oozie.azkaban等开发调度系统. 一.为什么学习Azkaban 一个完整的数据分析系统通常都是由大量任务单元(shell脚本.java ...
- Python - [01] 简介
人生苦短,我用Python 一.Python 是什么 Python是一个高层次的结合了解释型.编译型.互动性和面向对象的脚本语言. Python的设计具有很强的可读性,相比其他语言经常使用英文关键字, ...