函数式接口是只含一个抽象方法的接口,用于支持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 = Arrays.asList(“a”, “b”, “c”);
list.forEach(s -> System.out.println(s));
forEach方法接收一个Consumer,Lambda表达式替代了匿名内部类。
示例2:使用Predicate过滤数据
Predicate isEven = x -> x % 2 == 0;
List numbers = Arrays.asList(1, 2, 3, 4, 5);
List evenNumbers = numbers.stream()
.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和并发编程中的新特性。
基本上就这些,理解清楚后用起来并不复杂,但容易忽略的是保持接口的“单一抽象方法”原则。只要守住了这一点,函数式接口就能发挥最大作用。
以上就是Java中函数式接口的定义和应用的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/58458.html
微信扫一扫
支付宝扫一扫