consumer的andthen方法用于链式调用,先执行当前consumer再执行参数consumer,返回新consumer且不修改原对象;支持多步组合、从左到右执行,但不处理null且无逆向方法。

Consumer 的 andThen 方法用于在当前 Consumer 执行完后,再执行另一个 Consumer,实现链式调用。它返回一个新的 Consumer,不会修改原对象,符合函数式编程的不可变原则。
andThen 的基本用法
andThen 接收一个 Consumer 参数,返回组合后的新 Consumer。调用时先执行当前 Consumer,再执行传入的 Consumer。
- 原始 Consumer 处理输入,比如打印日志
- andThen 后的 Consumer 做后续操作,比如更新状态或清理资源
- 整个链路只在最终调用 accept() 时依次执行
链式调用示例
可以连续调用多个 andThen,形成多步处理流程:
Consumer<string> log = s -> System.out.println("日志: " + s);
Consumer<string> save = s -> System.out.println("保存: " + s);
Consumer<string> notify = s -> System.out.println("通知: " + s);
Consumer<string> chain = log.andThen(save).andThen(notify);
chain.accept("订单123"); // 按顺序输出日志、保存、通知
</string></string></string></string>
注意执行顺序和空安全
andThen 的执行顺序是“从左到右”,即先当前,再 andThen 的参数。如果某个 Consumer 抛出异常,后续不会执行。
- andThen 不会自动处理 null:传入 null 会导致 NullPointerException
- 若需容错,可在每个 Consumer 内部做判空,或用 Objects.requireNonNull 包装
- 不支持逆向执行(没有 thenThen 或 before 方法)
实际场景中的典型用法
常见于需要分阶段处理同一数据的场景,比如:
- 业务校验 → 记录操作日志 → 更新缓存
- 解析 JSON → 转换为 DTO → 存入数据库
- 用户登录成功后:更新最后登录时间 → 发送欢迎邮件 → 刷新 token
这种写法比手动顺序调用更清晰,也便于复用和测试单个 Consumer。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











