最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java 中函数式接口实现链式调用处理的方法
时间:2026-07-09 10:04:57 编辑:袖梨 来源:一聚教程网
Java函数式接口通过内置组合方法实现链式调用:Function用andThen/compose、Predicate用and/or/negate、Consumer用andThen;Supplier无组合能力,不可链式调用。
Java 中函数式接口本身不直接支持链式调用,但可以通过组合(composition)实现类似效果——这不是靠“返回 this”,而是靠接口内置的 compose 和 andThen 方法,让多个函数串起来执行。
Function 接口的链式转换
Function
- andThen(R → U):先执行当前函数,再对结果应用另一个函数(顺序执行)
- compose(S → T):先执行传入函数,再执行当前函数(逆序执行)
例如:
FunctionFunction
Function
int result = pipeline.apply(4); // 先 4+2=6,再 6*3=18
Predicate 的逻辑链式组合
Predicate
立即学习“Java免费学习笔记(深入)”;
-
pred1.and(pred2):等价于x -> pred1.test(x) && pred2.test(x) -
pred1.or(pred2):等价于x -> pred1.test(x) || pred2.test(x) -
pred.negate():取反,常用于 filter 链中反转逻辑
实际使用如:
PredicatePredicate
List
.filter(isLong.and(startsWithA))
.collect(Collectors.toList());
Consumer 的链式消费
Consumer
- 每个 Consumer 执行副作用(如打印、存库),不返回值
-
c1.andThen(c2)表示先执行 c1,再执行 c2
例如:
ConsumerConsumer
Consumer
pipeline.accept("order-1001"); // 先打印,再保存
Supplier 不支持链式组合
Supplierget(),没有组合能力——因为它不接收输入,无法像 Function 那样串联输入输出流。若需“链式获取”,需手动封装或借助 Optional/Stream 等中间结构:
- 不能写
supplier1.andThen(supplier2)(编译报错) - 常见替代:用 Function 包装 Supplier 结果,或用 Stream.generate().limit(1).map(...) 模拟
真正意义上的链式调用,在函数式接口中体现为数据流的传递与转换,而非对象方法调用的 this 返回。理解这点,就能避开把 Supplier 或 Runnable 当成 fluent API 去强行链的误区。
相关文章
- 《Disney Lorcana: Wilds Unknown》预购开启 首批《Toy Story》及皮克斯卡牌购买指南 07-29
- 车来了赶车闹钟如何设置 07-29
- 崩坏星穹铁道余晖残卷巨剑守护打法攻略 07-29
- 崩坏星穹铁道砂金角色部分背景介绍 07-29
- 崩坏3雷电芽衣什么时候上线 07-29
- 玩具熊的五夜后宫4代噩梦气球男孩Nightmare Balloon Boy介绍 07-29