【一看就懂的java学习】高级篇 之 函数式接口

函数式接口概述

函数式接口:有且仅有一个抽象方法的接口
Java中的函数式编程体现就是Lambda表达式,所以函数式接口就是可以适用于Lambda使用的接口
只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导

如何检测一个接口是不是函数式接口

  • @FunctionalInterface
  • 放在接口定义的上方:如果接口是函数式接口,编译通过;如果不是则失败

注意

  • 自定义函数式接口时,@FunctionalInterface是可选的,就算不写,只要保证满足函数式接口定义的条件,也照样是函数式接口。但是,建议加上该注解

函数式接口作为方法的参数

如果方法的参数是一个函数式接口,可以使用Lambda表达式作为参数传递

  • startThread(()-> System.out.println(Thread.currentThread().getName()+“线程启动了”));
public class RunnableDemo {
   
    public static void main(String[] args) {
   
//在主方法中调用startThread方法

        //匿名内部类
        startThread(new Runnable() {
   
            @Override
            public void run() {
   
                System.out.println(Thread.currentThread().getName()+"线程启动了");
            }
        });

        //Lambda表达式
        startThread(()-> System.out.println(Thread.currentThread().getName()+"线程启动了"));
    }

    private static void startThread(Runnable r) {
   
//        Thread t = new Thread(r);
//        t.start();
        new Thread(r).start();
    }
}

函数式接口作为方法的返回值

如果方法的参数是一个函数式接口,可以使用Lambda表达式作为结果返回

  • private static Comparator getComparator() {
    return (s1, s2)->s1.length()-s2.length();
    }
public class ComparatorDemo {
   
    public static void main(String[] args) {
   
        //构造使用场景

        //定义集合,存储字符串元素
        ArrayList<String> array = new ArrayList<String>();

        array.add("cccc");
        array.add("aa");
        array.add("b");
        array.add("ddd");

        System.out.println("排序前"+array);

//        Collections.sort(array);//自然排序,字母顺序
        Collections.sort(array,getComparator());
        System.out.println(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值