java内的函数式接口是指只定义一个抽象方法的接口
如下
也可以自己定义一个函数式接口
其中这个注解
@FunctionalInterface
是用来检查该接口是否是一个函数式接口
函数式接口可以用于方法的参数,方法的返回值。并且支持Lamdba表达式对函数式接口内的抽象方法进行重写,所以可以使代码更加简洁和灵活。
例如用Comparator接口定义自己的排序方法,此时函数式接口是作为返回值的
import java.util.Arrays;
import java.util.Comparator;
public class Demo02 {
public static Comparator getComparable() {
//Lambda
return (o1, o2) -> o2.length() - o1.length();
}
public static void main(String[] args) {
String[] arr = {"111","aaa","123","abcasdasd"};
//排序前的数组
System.out.println(Arrays.toString(arr));
Arrays.sort(arr,getComparable());
System.out.println(Arrays.toString(arr));
}
}
可以看出用Lamdba表达式减少了代码的行数,更加的简洁。
当函数式接口作为方法的参数时
@FunctionalInterface
public interface MessageBuilder {
public abstract String Build();
}
public class Demo01 {
public static void showLog(int level,MessageBuilder mb) {
if(level == 1) {
System.out.println(mb.Build());
}
}
public static void main(String[] args) {
String s1 = "123";
String s2 = "Java";
String s3 = "yyds";
//Lambda
showLog(1,() -> {
return s1+s2+s3;
});
}
}
这是一个简单的实现三个字符串相连并输出的方法,使用Lamdba表达式使代码更加简洁好看
以上是我在学习过程中做的一些笔记,有哪里错了可以说出来和我一起共同学习一下哈



