函数式接口:有且仅有一个抽象方法的接口
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();
           }
}
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号