You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何将Flow<List<Flow<T>>>转换为Flow<List<T>>

解决方案

你可以组合使用flatMapLatest和combine操作符实现需求,最终代码如下:

getIndexesOfDay(todayDay)
    .flatMapLatest { indexes ->
        if (indexes.isNullOrEmpty()) {
            flowOf(emptyList())
        } else {
            combine(
                flows = indexes.map { mIndex -> getDetailsByIndex(mIndex) }
            ) { arrayOfDetails ->
                arrayOfDetails.toList()
            }
        }
    }

实现说明

  • 用flatMapLatest替换你原本使用的map操作符:当索引列表发生变更时,flatMapLatest会自动取消对旧索引对应的详情流的监听,转而监听新索引对应的详情流,保证索引列表的变更可以向下传播。
  • 用combine操作符把多个Flow<Details>合并为单个Flow<List<Details>>:只要任意一个详情流发射了新的Details对象,combine就会把所有详情流的最新值整合为列表向下发射,满足详情变更触发最终流更新的要求。

内容的提问来源于stack exchange,提问作者Geraldo Neto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:54:02