Kotlin中如何将独立定义的匿名函数传递给map()方法
Kotlin 匿名函数提取实现方案
直接在nest函数内定义匿名函数
因为映射逻辑依赖函数的泛型参数R和入参repeat,直接在nest内部定义变量即可:
fun <R> nest(list: List<R>, repeat: Int) { // 显式声明匿名函数的写法 val anonFunction: (R) -> List<R> = fun(mem: R): List<R> { return generateSequence(1) { it } .map { mem } .take(repeat) .toList() } return list.map(anonFunction) }
如果不需要显式使用fun关键字声明匿名函数,也可以直接写lambda表达式,效果完全一致:
fun <R> nest(list: List<R>, repeat: Int) { val anonFunction: (R) -> List<R> = { mem -> generateSequence(1) { it } .map { mem } .take(repeat) .toList() } return list.map(anonFunction) }
更简洁的优化实现
你原来的generateSequence写法可以直接替换为Kotlin标准库的List构造函数,逻辑等价且性能更优:
fun <R> nest(list: List<R>, repeat: Int) { val anonFunction: (R) -> List<R> = { mem -> List(repeat) { mem } } return list.map(anonFunction) }
提取为全局可复用函数
如果你需要把这段映射逻辑提取到nest函数外复用,可以封装为泛型高阶函数:
// 全局定义的映射函数生成器 fun <R> buildNestMapper(repeat: Int): (R) -> List<R> = { mem -> List(repeat) { mem } } // 调用方直接传入生成的映射函数 fun <R> nest(list: List<R>, repeat: Int) = list.map(buildNestMapper(repeat))
内容的提问来源于stack exchange,提问作者fungusAmongUs
相关产品推荐
相关产品推荐

