如何在Kotlin协程中从Flow一次性获取全部结果?
如何在挂起函数中一次性获取Flow的所有值?
你有一个返回Flow<Portfolio>的挂起函数:
suspend fun getPortfolios(): Flow<Portfolio> = // ...
需要在挂起函数中一次性获取所有结果(比如单元测试断言场景),但collect()返回Unit,没法直接拿到集合。其实Kotlin Flow提供了几个内置的挂起扩展函数,可以直接帮你把Flow的所有元素收集成集合:
toList():将Flow的所有元素收集到List中并返回,是挂起函数,不会强制同步,完全适配你的场景toSet():和toList()类似,返回元素的Set集合first()/single():如果只需要第一个元素,或者确认Flow只有一个元素时使用
示例用法(单元测试场景)
// 在挂起函数或协程作用域内调用 val allPortfolios: List<Portfolio> = getPortfolios().toList() // 之后就可以对整个列表做断言 assertEquals(3, allPortfolios.size) assertTrue(allPortfolios.any { it.name == "My Portfolio" })
自定义收集逻辑(如果需要)
如果内置函数满足不了需求,也可以手动用collect()配合可变集合来收集:
val portfolios = mutableListOf<Portfolio>() getPortfolios().collect { portfolio -> portfolios.add(portfolio) // 这里还可以加额外的处理逻辑 } // 此时portfolios就包含了Flow的所有元素
内容的提问来源于stack exchange,提问作者craigmiller160
相关产品推荐
相关产品推荐

