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

How to transform Flow<T> to Flow<List<T>> in Kotlin?

我有一个完整的项目流程,例如 Flow。我想将此流程转换为包含所有项目列表的 Flow

我试过

public fun <T> Flow<T>.toList(): Flow<List<T>> = flow {
    val list = toList(mutableListOf())
    emit(list.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>> = flow {
    val list = toList(mutableListOf())
    emit(list)
}

您可以在此处运行: https://pl.kotl.in/frCg831WM