文章目录
- 前置介绍
- 通过 lambda 表达式,使用匿名类,实现函数式接口
- 函数式接口和回调函数的关系
- 函数式接口的应用
前置介绍
是 Java 8 引入的核心概念之一,指的是 仅包含一个抽象方法的接口。它可以被 @FunctionalInterface 注解标记(可选),但即使不标记,只要满足“只有一个抽象方法”的条件,编译器也会将其视为函数式接口
函数式接口可以作为 Lambda 表达式的目标类型
往往通过 lambda 表达式的写法,使用一个匿名类,来实现一个函数接口
通过 lambda 表达式,使用匿名类,实现函数式接口
在 Java 8 之前,实现一个函数式接口需要通过匿名内部类
// 传统方式:匿名内部类
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("Hello from thread");
}
};
Java 8 引入后,实现一个函数式接口可以通过 Lambda 表达式简化代码来表示一个匿名的实现类
函数式接口的匿名实现
这种 lambda 表示表示,它是一个匿名类,实现了函数式接口,同时这个匿名实现类中实现的这个方法没有传参,被实现的方法内执行的是一个 sout 的操作
// 使用 Lambda 表达式
Runnable r = () -> System.out.println("Hello from thread");
函数式接口和回调函数的关系
函数式接口的匿名实现类,往往作为某个方法的参数传递过去,这个函数式接口的匿名实现类其实可以看作一个“回调函数”,虽然其是一个匿名实现“类”,但是起到了回调函数的作用,因为可以通过用不同的匿名类实现函数式接口中的唯一那个方法,实现该方法的写法不同,就可以看成“回调函数”的能力了
@FunctionalInterface
interface MyFunction {
int apply(int a, int b);
}
public class Main {
public static void main(String[] args) {
MyFunction add = (a, b) -> a + b;
System.out.println(add.apply(3, 4)); // 输出 7
MyFunction sub = (a, b) -> a - b;
System.out.println(sub.apply(3, 4)); // 输出 -1
}
}
函数式接口的应用
很常见的场景就是 java 的流式处理中 lambda 表达式
List<String> names = Arrays.asList("Apple", "Banana", "Cherry");
// 过滤长度大于5的字符串
List<String> result = names.stream()
.filter(Predicate.isEqual("Apple")) // 等于某个值
.collect(Collectors.toList());
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
// 将数字转换为平方值
List<Integer> squares = numbers.stream()
.map(x -> x * x)
.collect(Collectors.toList());
List<String> names = Arrays.asList("Alice", "Bob");
// 打印所有名字
names.forEach(name -> System.out.println(name));




![[特殊字符]《Qt实战:基于QCustomPlot的装药燃面动态曲线绘制(附右键菜单/样式美化/完整源码)》](https://i-blog.csdnimg.cn/direct/221b201d8c6049afa7fa8767fdb193f4.png)







![[免费]微信小程序宠物医院管理系统(uni-app+SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】](https://i-blog.csdnimg.cn/direct/6e930f3dde3c4f2bb9cf4501c8642e1c.jpeg)


![Docker 使用镜像[SpringBoot之Docker实战系列] - 第537篇](https://i-blog.csdnimg.cn/img_convert/482e1f7c534731cfe0fbc734a8d94d58.png)

![Error in beforeDestroy hook: “Error: [ElementForm]unpected width “](https://i-blog.csdnimg.cn/direct/1727a2e78fc24efb89a3ecebcec3198a.png)

