thenapply 是 completablefuture 的同步转换方法,用于前任务正常完成后在当前线程中执行 function 转换并返回新 completablefuture;不处理异常,支持链式调用,区别于 thencompose(扁平化异步)和 thenaccept(无返回消费)。

thenApply 是 CompletableFuture 提供的同步转换方法,用于在前一个异步任务完成(且正常返回结果)后,对结果做函数式转换,返回一个新的 CompletableFuture。
基本用法:传入 Function 函数
它接收一个 Function<t r></t>,即从上一阶段的类型 T 映射为新类型 R。注意:这个函数是在前一个任务完成后的**当前线程**中同步执行的(不是新开线程)。
示例:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
CompletableFuture<string> future = CompletableFuture.completedFuture("hello");
CompletableFuture<integer> lengthFuture = future.thenApply(s -> s.length());
// 结果是 CompletableFuture<integer>,值为 5
</integer></integer></string>
链式调用:支持多次 thenApply
每个 thenApply 都返回新的 CompletableFuture,因此可以连续调用,形成处理流水线:
CompletableFuture<string> f = CompletableFuture.completedFuture(" Java ");
CompletableFuture<string> trimmed = f.thenApply(String::trim); // "Java"
CompletableFuture<string> upper = trimmed.thenApply(String::toUpperCase); // "JAVA"
CompletableFuture<integer> len = upper.thenApply(String::length); // 4
</integer></string></string></string>
注意事项:异常不会被吞掉,但需显式处理
thenApply 不会处理上游的异常 —— 如果前一个 CompletableFuture 以异常结束,thenApply 的函数根本不会执行,下游 future 也会以相同异常完成。
- 若要统一处理异常,改用
handle或whenComplete - 若想在异常时提供默认值,可用
exceptionally补在链尾 - 不要在
thenApply函数里抛出未检查异常,否则会导致下游 future 异常完成
和 thenCompose、thenAccept 的区别
别混淆这三个常用方法:
-
thenApply:输入 T → 输出 R,返回CompletableFuture<r></r>(适合纯转换) -
thenCompose:输入 T → 返回CompletableFuture<r></r>,自动扁平化(适合后续还带异步操作) -
thenAccept:输入 T → 无返回(适合只消费结果,不产生新 future)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










