java学习(函数式接口)

函数式接口

**函数式接口:**即适用于函数式编程场景的接口, 而java中的函数式编程提现就是lambda,所以函数式接口就是适用于Lambda使用的接口。函数式接口 有且只有一个抽象返回的接口,可以包含其他方法。

格式:

  • public interface 接口名称{
  • public abstract 返回值类型 方法名称(可选参数信息)
  • //其他非抽象方法内容
  • }

@FunctionalInterface注解

  • 作用:
  • 可以检测接口是否是一个函数式接口
  • 是:编译成功
  • 否:编译失败(接口中有多个抽象方法或者没有抽象方法)
//定义一个函数式接口
@FunctionalInterface
public interface MyFunctionalInterface {
   //定义一个抽象方法
    public abstract void say();
}

//函数式接口实现类
public class MyFunctionalInterfaceImpl implements MyFunctionalInterface {
    //重写接口的抽象方法
    @Override
    public void say() {
        System.out.println("使用函数式接口的实现类重写抽象方法");
    }
}

/*
* 函数式接口:一般可以作为方法的的参数和返回值类型
* */
public class Demo {
    //定义一个方法,参数使用函数式接口
    public  static  void show(MyFunctionalInterface myFunctionalInterface){
       //调用接口的抽象方法
        myFunctionalInterface.say();
    }
    public static void main(String[] args) {
        //传递接口的实现类对象
        show(new MyFunctionalInterfaceImpl());
        //传递接口的匿名内部类,重写接口的抽象方法
        show(new MyFunctionalInterface() {
            @Override
            public void say() {
                System.out.println("使用匿名内部类重写函数式接口的抽象方法");
            }
        });
        //方法是一个函数式接口,所以可以用Lambda表达式
        show(()->System.out.println("使用lambda表达式重写函数式接口的抽象方法"));
    }
}

在这里插入图片描述

Runnable接口也是一个函数式接口。

public class DemoRunnable {
    //定义一个方法,参数为Runnable接口
    public  static  void startThread(Runnable run)
    {
        //开启多线程
        new Thread(run).start();
    }
    public static void main(String[] args) {
        //匿名内部类
        startThread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"线程启动了");
            }
        });
        //lambda表达式
        startThread(()-> System.out.println(Thread.currentThread().getName()+"线程启动了"));

    }
}

在这里插入图片描述
函数式接口可作为方法返回值

import java.util.Arrays;
import java.util.Comparator;

public class DemoComparator {
    //定义一个方法,返回值使用函数式接口Comparator
    public  static Comparator<String> get(){
        /*return new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                //按照字符串的的长度降序排序
                return  o2.length()-o1.length();
            }
        };*/
        //按照字符串的的长度降序排序
        //Lambda
        return (String o1, String o2)->o2.length()-o1.length();
    }
    public static void main(String[] args) {
        String[] strings = {"aaa","bb","c","dddd"};
        //输出打印前的数组
        System.out.println(Arrays.toString(strings));
        //调用Arrays中的sort方法,对字符串排序
        Arrays.sort(strings,get());
        System.out.println(Arrays.toString(strings));
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值