Kotlin Map 项目列表流程

Abh*_*bhi 3 android kotlin kotlin-flow

我有一个事务存储库,我可以从中获取Flow<List<Transaction>>.
基于这些数据,我需要创建一个Flow<List<Source?>>.

可以传递给 which 的hastransaction返回一个源(如果存在),否则返回。sourceIdsourceRepository.getSource()null

视图模型代码

var transactions: Flow<List<Transaction>> = transactionRepository.transactions
var sourceList: Flow<List<Source?>> = flow {
    transactions.map {
        it.map { transaction ->
            if (transaction.sourceId != null) {
                sourceRepository.getSource(transaction.sourceId)
            } else {
                null
            }
        }
    }.collect {
        emit(it)
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么办法可以改变mapmap减少这段代码吗?

Arp*_*kla 5

我认为你不能map在这里避免 s 。您可以避免的是额外的flow构建器。

val transactions: Flow<List<Transaction>> = transactionRepository.transactions
val sourceList: Flow<List<Source?>> =
    transactions.map { list ->
        list.map { transaction ->
            transaction.sourceId?.let { sourceRepository.getSource(it) }
        }
    }
Run Code Online (Sandbox Code Playgroud)

另外,更喜欢vals 而不是vars。