运行 使用 asSequence() 批量处理序列?
Running a sequence in batches using asSequence()?
我有一个功能:
private fun importProductsInSequence(products: List<Product>): List<Result> =
products.asSequence()
.map { saveProduct(it)}
.takeWhile { products.isNotEmpty() }
.toList()
是否可以重写此序列以使其批量工作?例如,将包含 1000 个产品的列表传递给此方法,序列将获取 100 个产品,保存它们,然后是下一个 100 个,直到满足 products.isNotEmpty()
条件?
takeWhile
在这里不需要,因为 products
列表大小即使在您遍历序列后也不会改变。 products.isNotEmpty()
永远为真
Kotlin 有 chunked
方法可以根据需要批量给你对象
private fun importProductsInSequence(products: List<Product>): List<Result> =
products.asSequence()
.chunked(100)
.map { saveProducts(it)} // saveProducts method would take list of products and return list of Result
.flatten()
.toList()
您需要使用chunked
private fun importProductsInSequence(products: List<Product>): List<Product>{
products.asSequence().chunked(100).onEach{ saveProduct(it)}.flatten().toList()
chunk
将列表划分为提供的大小,最后一部分的元素将少于前一部分。
我有一个功能:
private fun importProductsInSequence(products: List<Product>): List<Result> =
products.asSequence()
.map { saveProduct(it)}
.takeWhile { products.isNotEmpty() }
.toList()
是否可以重写此序列以使其批量工作?例如,将包含 1000 个产品的列表传递给此方法,序列将获取 100 个产品,保存它们,然后是下一个 100 个,直到满足 products.isNotEmpty()
条件?
takeWhile
在这里不需要,因为 products
列表大小即使在您遍历序列后也不会改变。 products.isNotEmpty()
永远为真
Kotlin 有 chunked
方法可以根据需要批量给你对象
private fun importProductsInSequence(products: List<Product>): List<Result> =
products.asSequence()
.chunked(100)
.map { saveProducts(it)} // saveProducts method would take list of products and return list of Result
.flatten()
.toList()
您需要使用chunked
private fun importProductsInSequence(products: List<Product>): List<Product>{
products.asSequence().chunked(100).onEach{ saveProduct(it)}.flatten().toList()
chunk
将列表划分为提供的大小,最后一部分的元素将少于前一部分。