簡體   English   中英

如何在 Kotlin 流中包含的列表中的元素上調用方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM