如何将 kotlinx.coroutines.flow 列表转换为普通的数据类列表。
既然你想要从嵌套列表的流转为单一列表,那么你需要进行平坦映射操作:
suspend fun <T> Flow<List<T>>.flattenToList() =
flatMapConcat { it.asFlow() }.toList()
用法示例:
suspend fun main() {
val flowOfLists: Flow<List<Int>> = flowOf(listOf(1, 2), listOf(3, 4))
val flatList: List<Int> = flowOfLists.flattenToList()
println(flatList)
}
如@JeelVankhede在评论中提到的,您可以使用collect
来消耗该流。
例如:
fun tickets(): Flow<List<Ticket>> {
return flow {
// first share whats in db before re-fetching
ticketDao.selectAllTickets().collect { emit(it) }
updateTickets()
emitAll(ticketDao.selectAllTickets())
}
}
collect
或map
等方法将其作为列表使用。 - Jeel VankhedesomeFlow.first()
- Joozd