☰
Java四大核心函数式接口详解:Supplier、Consumer、Function、Predicate
2026/11/2 14:54:25 网站建设 项目流程

Java四大核心函数式接口详解

Java 8引入了函数式编程的支持,其中四大核心函数式接口(Supplier、Consumer、Function、Predicate)是Lambda表达式和方法引用的基础。这些接口均位于java.util.function包中。


Supplier:无参供给型接口

Supplier<T>表示一个不接收参数但返回结果的供给操作。常用于延迟计算或生成值。

方法签名:

T get();

示例:

Supplier<String> randomString = () -> UUID.randomUUID().toString(); System.out.println(randomString.get()); // 输出随机UUID字符串

典型场景:

  • 惰性初始化或缓存
  • 工厂模式生成对象

Consumer:单参消费型接口

Consumer<T>接收一个参数但不返回结果,用于消费数据。

方法签名:

void accept(T t);

默认方法:

default Consumer<T> andThen(Consumer<? super T> after)

示例:

Consumer<String> printUpperCase = s -> System.out.println(s.toUpperCase()); printUpperCase.accept("hello"); // 输出"HELLO" // 链式调用 Consumer<String> printAndLog = printUpperCase.andThen(s -> System.out.println("Logged: " + s)); printAndLog.accept("world");

典型场景:

  • 集合遍历(如List.forEach)
  • 日志记录或通知

Function:单参转换型接口

Function<T, R>接收一个参数并返回结果,用于数据转换。

方法签名:

R apply(T t);

默认方法:

default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) default <V> Function<V, R> compose(Function<? super V, ? extends T> before)

示例:

Function<String, Integer> parseToInt = Integer::parseInt; int num = parseToInt.apply("123"); // 返回123 // 链式调用 Function<String, String> toUpperAndTrim = s -> s.toUpperCase().trim(); Function<String, Integer> pipeline = toUpperAndTrim.andThen(String::length); int length = pipeline.apply(" abc "); // 返回3

典型场景:

  • 数据转换(如字符串处理)
  • Stream API中的map操作

Predicate:单参断言型接口

Predicate<T>接收一个参数并返回布尔值,用于条件判断。

方法签名:

boolean test(T t);

默认方法:

default Predicate<T> and(Predicate<? super T> other) default Predicate<T> or(Predicate<? super T> other) default Predicate<T> negate()

示例:

Predicate<String> isLong = s -> s.length() > 5; boolean result = isLong.test("hello world"); // 返回true // 组合条件 Predicate<String> isLongAndStartsWithH = isLong.and(s -> s.startsWith("h")); boolean combinedResult = isLongAndStartsWithH.test("hello"); // 返回false

典型场景:

  • 集合过滤(如Stream.filter)
  • 验证逻辑(如参数校验)

总结对比

接口方法签名输入参数返回值典型用途
Supplier<T>T get()无T生成值
Consumer<T>void accept(T)T无消费数据
Function<T,R>R apply(T)TR数据转换
Predicate<T>boolean test(T)Tboolean条件判断

通过灵活组合这些接口,可以显著减少样板代码并提升代码可读性。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询