我有一个完整的项目流,比如flow。我想把这个流程转换成flow <list;与所有项目的列表。>
我试着使用
public fun <T> Flow<T>.toList(): Flow<List<T>> = flow {
val list = toList(mutableListOf())
emit(list.toImmutableList())
}
但是这个函数从不输出值
首先,我必须说创建一个元素的Flow
没有真正的意义。当然,如果流有时包含一个元素,有时包含多个元素,这也不是问题。但是,如果您创建的流总是包含单个元素,那么您可能应该使用suspend函数来返回该元素。
有趣. .你已经在协程库中有了挂起函数,它是toList()
:
// no need to create a flow out of it
val list = myFlow.toList().toImmutableList()
如果你真的想要一个包含单个List<T>
元素的流,那么我认为你做对了。单个元素将是初始流中所有项的列表。
我想你的问题可能是Flow.toList()
函数已经存在。试着用不同的方式命名:
fun main(args: Array<String>) = runBlocking {
val initialFlow = List(5) { it }.asFlow()
initialFlow.toSingleListItem().collect {
println(it)
}
}
public fun <T> Flow<T>.toSingleListItem(): Flow<List<T>> = flowOf(toList().toImmutableList())
你可以在这里运行:https://pl.kotl.in/frCg831WM