再美不及姑娘你
又见西风上碧树

函数式接口:有且仅有一个抽象方法的接口

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();
          }
}
 
posted on   再美不及姑娘你  阅读(486)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示