Android 如何使用kotlin flow中的flatMapMerge?
我有这些代码,我想让它更优化 我想我可以用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
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有其他选择吗?