我有这些代码,我希望它可以使其更优化
我想我可以使用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()的方式是什么?
答案 0 :(得分:0)
尝试使用类似这样的内容:
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)