如何对Kotlin Flow包含的列表内元素调用对应方法
优化方案
从逻辑上看,你需要实现的「Flow流转换 + 列表内部元素映射」两层操作是无法省略的,我们可以通过封装Kotlin扩展函数来简化调用侧写法,避免每次手动写两层map:
- 首先定义通用的Flow列表转换扩展函数
inline fun <T, R> Flow<List<T>>.mapList(crossinline transform: (T) -> R): Flow<List<R>> { return this.map { list -> list.map(transform) } }
- 改造你的业务代码,调用扩展函数即可
override fun getEarnings(): Flow<List<Transaction>> { return transactionDao.getEarnings() .mapList { transaction -> transaction.asDomainModel() } }
该写法和你原有两层
map的实现运行效率完全一致,只是做了语法糖封装,既简化了重复代码,也提升了可读性。如果你的项目里有大量类似的Flow列表元素转换场景,这种封装的收益会更高。
内容的提问来源于stack exchange,提问作者DennisVA
相关产品推荐
相关产品推荐

