Java函数式接口通过内置组合方法实现链式调用:Function用andThen/compose、Predicate用and/or/negate、Consumer用andThen;Supplier无组合能力,不可链式调用。
Java 中函数式接口本身不直接支持链式调用,但可以通过组合(composition)实现类似效果——这不是靠“返回 this”,而是靠接口内置的 compose 和 andThen 方法,让多个函数串起来执行。
Function 是最典型的可链式组合的函数式接口。它定义了两个核心组合方法:
例如:
Function addTwo = x -> x + 2;Predicate 支持 and、or、negate 等默认方法,实现条件的叠加与取反:
立即学习“Java免费学习笔记(深入)”;
pred1.and(pred2):等价于 x -> pred1.test(x) && pred2.test(x)
pred1.or(pred2):等价于 x -> pred1.test(x) || pred2.test(x)
pred.negate():取反,常用于 filter 链中反转逻辑实际使用如:
Predicate isLong = s -> s.length() > 5;Consumer 提供 andThen 方法,用于按顺序执行多个消费动作:
c1.andThen(c2) 表示先执行 c1,再执行 c2例如:
Consumer log = s -> System.out.println("LOG: " + s);Supplier 只有一个无参方法 get(),没有组合能力——因为它不接收输入,无法像 Function 那样串联输入输出流。若需“链式获取”,需手动封装或借助 Optional/Stream 等中间结构:
supplier1.andThen(supplier2)(编译报错)真正意义上的链式调用,在函数式接口中体现为数据流的传递与转换,而非对象方法调用的 this 返回。理解这点,就能避开把 Supplier 或 Runnable 当成 fluent API 去强行链的误区。