Kotlin如何优雅实现列表元素依次传参的链式函数调用
实现方式
直接用Kotlin标准库内置的reduce扩展函数即可,不需要额外封装工具方法,逻辑完全匹配你要的链式调用效果。
代码示例
val list = listOf(1,5,3,4) // 替换成你自己的foo函数逻辑即可,示例用简单加法做演示 fun Int.foo(next: Int): Int = this + next val result = list.reduce { accumulator, nextElement -> accumulator.foo(nextElement) }
上述代码的执行效果和你手写1.foo(5).foo(3).foo(4)完全一致。
逻辑说明
reduce的遍历规则刚好适配这个场景:
- 第一步取列表首元素作为初始累积值,对应你示例里的起始值1
- 每一轮遍历拿上一轮的计算结果作为接收者,传入当前遍历到的下一个元素调用
foo,把返回值更新为新的累积值 - 遍历到列表最后一个元素执行完后,直接返回最终累积值,没有额外开销
如果你的列表有可能为空,换成空安全的reduceOrNull即可,空列表场景会返回null,不会抛出运行时异常:
val safeResult = list.reduceOrNull { acc, i -> acc.foo(i) }
内容的提问来源于stack exchange,提问作者EnzyWeiss
相关产品推荐
相关产品推荐

