函数式接口:有且仅有一个抽象方法的接口
Java中的函数式编程体现的就是Lambda表达式,所以函数式接口就是可以适用于Lambda使用的接口,只有确保接口中有且仅有一个抽象方法时,Java中的Lambda才能顺利地进行推导
如何检测一个接口是不是函数式接口?
使用注解: @Functionallnterface
放在接口定义的上方:如果接口是函数式接口,编译通过;如果不是,编译失败
示例
接口
package Demo042601;
@FunctionalInterface
//该注解表示此接口为函数式接口
public interface MyInter {
void show();
}
测试类
package Demo042601;
public class MyInterDemo {
public static void main(String[] args) {
MyInter mi=()-> System.out.println("最美不过姑娘你");
mi.show();
}
}
一、函数式接口作为方法的参数
如果方法的参数是一个函数式接口,我们可以使用Lambda表达式作为参数传递
示例:
定义一个类(RunnableDemo),在类中提供方法
startThread(Runnable r)方法参数Runnable 是一个函数式接口,并调用
public class RunnableDemo {
public static void main(String[] args) {
startThread(()-> System.out.println(Thread.currentThread().getName()+"线程启动了"));
}
private static void startThread(Runnable r){
new Thread(r).start();
}
}
二、函数式接口作为方法的返回值
示例:
定义一个类(ComparatorDemo),在类中提供一个方法
Comparator<String>getComparator()方法返回值Comparator是一个函数式接口并调用
package Demo042602;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class ComparatorDemo {
public static void main(String[] args) {
//对一个数组按照长度排序
ArrayList<String>al=new ArrayList<String>();
al.add("aa");
al.add("b");
al.add("ccc");
al.add("dddd");
Collections.sort(al,getComparator());
System.out.println(al);
}
private static Comparator<String> getComparator(){
return (String s1,String s2)-> s1.length()-s2.length();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)