函数式接口是只含一个抽象方法的接口,用于支持Lambda表达式,可通过@FunctionalInterface注解标识,常见内置接口包括Supplier、Consumer、Function、Predicate等,结合Lambda可简化集合操作与函数式编程。

函数式接口是Java 8引入的一个核心概念,主要用于支持Lambda表达式。它指的是**只包含一个抽象方法**的接口,可以有多个默认方法或静态方法。这种接口可以用@FunctionalInterface注解来标识,编译器会检查是否符合函数式接口的定义。
函数式接口的定义
要定义一个函数式接口,只需确保接口中只有一个抽象方法。使用@FunctionalInterface注解可以让代码更清晰,并在违反规则时提示错误。
示例:
@FunctionalInterface
public interface MyFunction {
int apply(int a, int b);
}
这个接口只有一个抽象方法apply,因此是函数式接口。如果再添加一个抽象方法,编译就会报错。
常见的内置函数式接口
Java 8在java.util.function包中提供了许多常用的函数式接口,适用于大多数场景:
立即学习“Java免费学习笔记(深入)”;
-
Supplier
:无输入,返回一个结果。例如生成随机数或对象实例。 -
Consumer
:接收一个输入,不返回结果。常用于打印或修改数据。 -
Function
:接收一个输入,返回一个结果。适合数据转换。 -
Predicate
:接收一个输入,返回boolean值。多用于条件判断。 -
UnaryOperator
:Function的特例,输入和输出类型相同。 -
BinaryOperator
:接收两个同类型参数,返回同样类型的值。
函数式接口的实际应用
函数式接口结合Lambda表达式,能显著简化代码,特别是在集合操作中。
示例1:使用Consumer遍历集合
List
list.forEach(s -> System.out.println(s));
forEach方法接收一个Consumer,Lambda表达式替代了匿名内部类。
专为中小型企业定制的网络办公软件,富有竞争力的十大特性: 1、独创 web服务器、数据库和应用程序全部自动傻瓜安装,建立企业信息中枢 只需3分钟。 2、客户机无需安装专用软件,使用浏览器即可实现全球办公。 3、集成Internet邮件管理组件,提供web方式的远程邮件服务。 4、集成语音会议组件,节省长途话费开支。 5、集成手机短信组件,重要信息可直接发送到员工手机。 6、集成网络硬
Predicate
List
List
.filter(isEven)
.collect(Collectors.toList());
通过Predicate定义筛选条件,使逻辑清晰且可复用。
示例3:自定义函数式接口当内置接口无法满足需求时,可以自定义:
@FunctionalInterface
public interface Calculator {
double calculate(double a, double b);
}
使用方式:
Calculator add = (a, b) -> a + b;
System.out.println(add.calculate(2.0, 3.0)); // 输出5.0
小结
函数式接口是Java实现函数式编程的基础。它让Lambda表达式有了目标类型,使代码更简洁、易读。合理使用内置接口可以避免重复造轮子,而自定义接口则能灵活应对特定业务场景。掌握函数式接口有助于更好地利用Stream API和并发编程中的新特性。
基本上就这些,理解清楚后用起来并不复杂,但容易忽略的是保持接口的“单一抽象方法”原则。只要守住了这一点,函数式接口就能发挥最大作用。









