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
相关产品推荐
相关产品推荐

