函数式接口
本文最后更新于 2025年5月20日 14:24
什么是函数式接口
函数式接口是Java 8引入的概念,指只包含一个抽象方法的接口。这些接口可以使用Lambda表达式来表示,使代码更加简洁。
函数式接口的特点:
- 只有一个抽象方法(Single Abstract Method,简称SAM)
- 可以有多个默认方法或静态方法
- 通常使用
@FunctionalInterface
注解标记(非必须,但推荐使用)
Java内置的常用函数式接口
Java 8 在 java.util.function
包中提供了许多预定义的函数式接口:
Consumer
- 接收一个参数,无返回值 1
2Consumer<String> consumer = s -> System.out.println(s);
consumer.accept("你好"); // 输出: 你好Supplier
- 无参数,返回一个结果 1
2Supplier<String> supplier = () -> "当前时间: " + System.currentTimeMillis();
String result = supplier.get(); // 获取当前时间字符串Function<T, R> - 接收一个参数,返回一个结果
1
2Function<String, Integer> function = s -> s.length();
Integer length = function.apply("测试字符串"); // 返回: 5Predicate
- 接收一个参数,返回布尔值 1
2Predicate<String> predicate = s -> s.length() > 5;
boolean result = predicate.test("你好世界"); // 返回: falseBiFunction<T, U, R> - 接收两个参数,返回一个结果
1
2BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
Integer sum = add.apply(5, 3); // 返回: 8
自定义函数式接口
你可以创建自己的函数式接口:
1 |
|
函数式接口的实际应用
1. 作为方法参数
1 |
|
2. 在Stream API中使用
1 |
|
3. 在CompletableFuture中使用
1 |
|
函数式接口的优势
- 代码简洁:减少了匿名内部类的冗余代码
- 提高可读性:使代码的意图更加清晰
- 便于并行处理:特别适合流式操作和并行计算
- 灵活组合:函数可以作为参数传递,便于组合使用
函数式接口和Lambda表达式是Java向函数式编程迈出的重要一步,掌握它们将大大提升你的编程效率和代码质量。
函数式接口
http://example.com/2025/04/22/函数式接口/