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

如何将Room返回的Flow<List<ObjectDto>>转换为Flow<List<Object>>?

正确实现方式

你完全可以用Flow的map操作符来实现这个转换,这是最简洁高效的做法,不需要手动嵌套flow和collect。

代码示例

override fun getObjects(): Flow<List<Object>> {
    return objectDao.getObjects()
        .map { dtoList -> 
            dtoList.map { it.toObject() } 
        }
}

为什么你的原有写法没必要

你之前的写法属于冗余操作,因为Flow的map操作符本身就是用来处理转换每个发射值类型的场景:它会自动订阅上游Flow(也就是Room DAO返回的Flow<List<ObjectDto>>),每当上游发射新的列表数据时,就会执行转换逻辑,把List<ObjectDto>转成List<Object>,再传递给下游的收集者,完全不需要手动调用collect再emit。

额外说明

如果后续需要切换线程(比如Room的Flow默认在Dispatchers.IO线程执行查询,若要切换到其他线程可以搭配flowOn操作符),或者处理转换中的异常,可以在map前后添加对应的操作符,但单纯做类型转换的话,map就足够了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:05:28