首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Flow<List<Flow<T>>>转换为Flow<List<T>>

如何将Flow<List<Flow<T>>>转换为Flow<List<T>>
EN

Stack Overflow用户
提问于 2021-11-18 19:35:33
回答 1查看 538关注 0票数 4

我有一个数据库查询,它返回某一天对象的索引列表(),即:

代码语言:javascript
复制
getIndexesOfDay(day: Day): Flow<List<String>>

现在,我需要侦听每个索引的详细信息,例如:

代码语言:javascript
复制
getDetailsByIndex(index: String): Flow<Details>

所以问题是:我如何使用流来完成这个任务?

有两个重要的制约因素:

  1. 指标的变化应传播到最终流程;
  2. 对任何Details对象的更改也应该更新流。

我已经尝试过的:

代码语言:javascript
复制
getIndexesOfDay(todayDay)
          .map { indexes ->
              indexes?.map {
                      mIndex->
                  getDetailsByIndex(mIndex)
              }
          }

但是它返回一个Flow<List<Flow<Details>>>而不是所需的Flow<List<Details>>

感谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-18 20:12:10

我还没有对此进行测试,但我认为使用flatMapLatest()联合()应该是可能的

代码语言:javascript
复制
getIndexesOfDay(todayDay)
    .flatMapLatest { indexes ->
        combine(indexes.map { getDetailsByIndex(it) }) { it.asList() }
    }

对于每个新的索引列表,它多次调用getDetailsByIndex()来获取流列表,然后将这些流组合成一个详细信息列表流。

缺点是,每当索引更改时,它都会丢弃所有的Flow<Details>对象,即使在旧的和新的索引列表中都存在索引。最好为每个索引创建某种细节流缓存。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70025716

复制
相关文章

相似问题

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