一个支持步进的forEach函数



在Kotlin中,我想在第2步中迭代项目列表。这样做:

for (i in 0..users.lastIndex step 2) {
val user = users[i]
}

这没关系,但如果有更简单的东西,比如forEach,那就更好了。但是forEach不提供步进。是否有API允许您以forEach的方式提供步进?类似这样的东西:

users.forEach(step = 2) { user ->

}

据我所知,Kotlin标准库中没有这样的函数。然而,创建自己的扩展功能并不太困难:

inline fun <T> List<T>.forEachStep(step: Int = 1, action: (T) -> Unit) {
/*
* May want to have an iterator-based solution as well for lists that
* don't support random access. You could choose which solution to
* use based on 'if (this is RandomAccess)'.
*/
for (i in indices step step) {
action(get(i))
}
}

然后可以在任何List上使用。

val users: List<User> = ...
users.forEachStep(step = 2) { user ->
// do something...
}

使用forEach来替换for循环违反了Kotlin编码约定,这也提醒在链接高阶函数时要注意性能。在你开始疯狂使用扩展功能之前,值得记住:-(

比起循环,更喜欢使用高阶函数(filtermap等(。异常:forEach(更喜欢使用常规for循环,除非CCD_ 7的接收器是可为空的,或者CCD_更长的呼叫链(。

在使用复数的复杂表达式之间进行选择时高阶函数和循环,了解在每种情况下执行的操作并保持性能考虑。

相关内容

  • 没有找到相关文章

最新更新