运行 使用 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 将列表划分为提供的大小,最后一部分的元素将少于前一部分。