如何在<T> Kotlin 中将 Flow 转换为 Flow<List<T>>?



我有一个完整的项目流,比如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

最新更新