[英]How to call a method on an element within a list that is contained in a Kotlin Flow
我想知道是否有更好的方法來調用 Flow 中包含的列表中的元素的方法。 目前我正在這樣做,但我不喜歡調用 map() 兩次:
override fun getEarnings(): Flow<List<Transaction>> {
return transactionDao.getEarnings().map {
it.map { transaction -> transaction.asDomainModel() }
}
}
transactionsDao 中定義的 getEarnings() 方法:
@Query("SELECT * FROM transactions WHERE is_income = 1")
fun getEarnings(): Flow<List<DatabaseTransaction>>
對 philip 的回答進行補充,在您的特定情況下,您可以將 lambda 替換為可調用引用,以使代碼更加簡潔。 這可以這樣做
.mapIterable(Transaction::asDomainModel)
我出於同樣的目的創建了這個擴展:
inline fun <T, R> Flow<Iterable<T>>.mapIterable(crossinline transform: (T) -> R): Flow<List<R>> =
map { it.map(transform) }
用法:
fun getEarnings(): Flow<List<Transaction>> {
return transactionDao
.getEarnings()
.mapIterable { transaction ->
transaction.asDomainModel()
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.