Android 如何使用kotlin flow中的flatMapMerge?

Android 如何使用kotlin flow中的flatMapMerge?,android,kotlin,kotlin-coroutines,Android,Kotlin,Kotlin Coroutines,我有这些代码,我想让它更优化 我想我可以用kotlin flow的flatMapMerge 但我不认为应该如何将代码转换为流 val quiries = listof("s","b","s","g","d","r","t") quiries.map { query -> viewModelScope.launch { val results = fetchColumns(query) resultMutableData.postVal

我有这些代码,我想让它更优化

我想我可以用kotlin flow的flatMapMerge 但我不认为应该如何将代码转换为流

  val quiries = listof("s","b","s","g","d","r","t")
    quiries.map { query ->
      viewModelScope.launch {
        val results = fetchColumns(query)
        resultMutableData.postValue(results)
      }
    }

和fetchColumns()是挂起的函数 我在想也许我需要有一系列的问题????使用flatMapMerge()的方法是什么


尝试使用以下方法:

listOf("s","b","s","g","d","r","t").asFlow()
    .map { fetchColumns(it) }
    .onEach { resultMutableData.postValue(it) }
    .launchIn(viewModelScope)
由于不切换到另一个流,因此不需要任何
flatMap*
函数,只要
map
就足够了。而且,
map
参数已经声明为
suspend
,所以您不会阻塞线程。 但是
map
操作符被设计成按顺序处理数据,所以这些转换不会并行运行。要实现并行处理,可以使用
flatMapMerge
的变通方法:

listOf("s","b","s","g","d","r","t").asFlow()
    .onEach { println("onEach: $it") }
    .flatMapMerge {
        flow {
            emit(fetchColumns(it))
        }
    }
    .onEach { resultMutableData.postValue(it)) }
    .launchIn(viewModelScope)

我建议将问题的标题改为描述问题的标题,但在本例中,映射按顺序进行,是吗?如果我想开始抓取怎么办concurrently@ArturA你说得对,映射函数是为按顺序处理数据而设计的。关于在协同路由存储库中添加顺序运算符的并行版本,仍然需要考虑。。有人建议了一种使映射操作并行的解决方案,我已经用该解决方案更新了答案。@Stanislav Shamilov谢谢,flatmapMerge返回的结果不符合顺序,是吗?RxAndroid ConcatmaPager有其他选择吗?