You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin更惯用实现:将findAll消费为List或Sequence的方法

Kotlin惯用写法与Sequence生成问题

给定如下Kotlin函数:

fun findAll(rowConsumer: (String) -> Unit) {
    ....
}

当前通过以下方式生成List:

val results = mutableListOf<String>()
someRef.findAll() { results.add(it) }

问题

在Kotlin中是否有更惯用的实现方式?以及如何生成Sequence而非List?


更惯用的List实现方式

可以使用Kotlin标准库提供的buildList函数,这是构建列表的惯用写法,无需手动创建可变列表实例,代码更简洁且符合Kotlin风格:

val results = buildList {
    someRef.findAll { add(it) }
}

buildList会自动创建MutableList并将其作为lambda的接收者,直接调用add即可添加元素,最终返回不可变的List;如果需要可变列表,可改用buildMutableList。

生成Sequence的实现方式

要生成惰性求值的Sequence,可以借助sequence函数。在sequence的lambda中调用findAll,每收到一个元素就用yield函数将其发送到序列中:

val resultsSequence = sequence {
    someRef.findAll { yield(it) }
}

这种方式下,Sequence是惰性的——只有在遍历它(比如调用toList()、forEach等操作)时,才会触发findAll的执行并逐个产生元素,适合处理大数据量或无需一次性加载所有元素的场景。


内容的提问来源于stack exchange,提问作者KevinS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 13:47:08