首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在kotlin flow中使用flatMapMerge?

如何在kotlin flow中使用flatMapMerge?
EN

Stack Overflow用户
提问于 2019-09-09 23:48:24
回答 1查看 4.7K关注 0票数 1

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

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

代码语言:javascript
复制
  val quiries = listof("s","b","s","g","d","r","t")
    quiries.map { query ->
      viewModelScope.launch {
        val results = fetchColumns(query)
        resultMutableData.postValue(results)
      }
    }

和fetchColumns()都是挂起的函数,我想也许我需要有查询流?使用flatMapMerge()的方法是什么?

https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/flat-map-merge.html

EN

回答 1

Stack Overflow用户

发布于 2019-09-13 05:04:22

试着使用这样的东西:

代码语言:javascript
复制
listOf("s","b","s","g","d","r","t").asFlow()
    .map { fetchColumns(it) }
    .onEach { resultMutableData.postValue(it) }
    .launchIn(viewModelScope)

因为您不需要切换到另一个流,所以不需要任何flatMap*函数,只需要map就足够了。此外,map参数已经声明为suspend,因此不会阻塞线程。但是map运算符被设计为按顺序处理数据,因此这些转换不会并行运行。要实现并行处理,可以使用使用flatMapMerge的解决方法:

代码语言:javascript
复制
listOf("s","b","s","g","d","r","t").asFlow()
    .onEach { println("onEach: $it") }
    .flatMapMerge {
        flow {
            emit(fetchColumns(it))
        }
    }
    .onEach { resultMutableData.postValue(it)) }
    .launchIn(viewModelScope)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57857304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档