Art*_*r A 3 android kotlin kotlin-coroutines
我有这些代码,我希望它能够使其更加优化
我想我可以使用 kotlin-flow 的 flatMapMerge 但我不认为我应该如何将我的代码转换为 flow
val quiries = listof("s","b","s","g","d","r","t")
quiries.map { query ->
viewModelScope.launch {
val results = fetchColumns(query)
resultMutableData.postValue(results)
}
}
Run Code Online (Sandbox Code Playgroud)
和 fetchColumns() 是挂起的函数,我想也许我需要查询流???使用 flatMapMerge() 的方法是什么?
尝试使用这样的东西:
listOf("s","b","s","g","d","r","t").asFlow()
.map { fetchColumns(it) }
.onEach { resultMutableData.postValue(it) }
.launchIn(viewModelScope)
Run Code Online (Sandbox Code Playgroud)
由于您不切换到另一个流程,因此不需要任何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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10469 次 |
| 最近记录: |