我有一个数据库查询,它返回某一天对象的索引列表(),即:
getIndexesOfDay(day: Day): Flow<List<String>>现在,我需要侦听每个索引的详细信息,例如:
getDetailsByIndex(index: String): Flow<Details>所以问题是:我如何使用流来完成这个任务?
有两个重要的制约因素:
Details对象的更改也应该更新流。我已经尝试过的:
getIndexesOfDay(todayDay)
.map { indexes ->
indexes?.map {
mIndex->
getDetailsByIndex(mIndex)
}
}但是它返回一个Flow<List<Flow<Details>>>而不是所需的Flow<List<Details>>。
感谢你的帮助!
发布于 2021-11-18 20:12:10
我还没有对此进行测试,但我认为使用flatMapLatest()和联合()应该是可能的
getIndexesOfDay(todayDay)
.flatMapLatest { indexes ->
combine(indexes.map { getDetailsByIndex(it) }) { it.asList() }
}对于每个新的索引列表,它多次调用getDetailsByIndex()来获取流列表,然后将这些流组合成一个详细信息列表流。
缺点是,每当索引更改时,它都会丢弃所有的Flow<Details>对象,即使在旧的和新的索引列表中都存在索引。最好为每个索引创建某种细节流缓存。
https://stackoverflow.com/questions/70025716
复制相似问题