在Android应用程序的数据类模型属性中折叠Kotlin
我不确定标题是否足够清晰,因此我将在这里解释: 我有四种型号: 这个模型是我用来解析文件中的JSON的模型在Android应用程序的数据类模型属性中折叠Kotlin,android,kotlin,fold,Android,Kotlin,Fold,我不确定标题是否足够清晰,因此我将在这里解释: 我有四种型号: 这个模型是我用来解析文件中的JSON的模型 @JsonClass(generateAdapter = true) data class Account( val account: String, val balance: String, val transactions: List<Transaction> ) 对于UI层,我有一些等效的模型: data class AccountEntity(
@JsonClass(generateAdapter = true)
data class Account(
val account: String,
val balance: String,
val transactions: List<Transaction>
)
对于UI层,我有一些等效的模型:
data class AccountEntity(
val account: String,
val balance: String,
val transactions: List<TransactionEntity>
)
我想做的一件棘手的事情是,一个账户
有一个余额
,我需要在每个交易数据
中显示之前的余额
和之后的余额
,它们分别是进行此交易之前的账户余额,以及交易完成后的账户余额
对我来说,这不仅要理解而且要实现都有点棘手。
我曾想过在每个事务中实现某种折叠
操作,但我不确定如何仅在balanceBefore
和balanceAfter
属性中应用它
还有别的想法吗?
提前多谢 嗯,这是某种
减少/折叠
功能,它还允许您映射您的事务
对象
此函数的作用是跟踪累加器中的当前余额,并转换每个事务
对象:
inline fun <R> List<Transaction>.map(
initial: Int,
transform: (transaction: Transaction, beforeBalance: Int, afterBalance: Int) -> R
): List<R> {
var accumulator = initial
val destination = ArrayList<R>()
for (transaction in this) {
val after = accumulator - transaction.amount
destination.add(transform(transaction, accumulator, after))
accumulator = after
}
return destination
}
为了更通用和更实用,您可以将此行累加器-transaction.amount
移动到函数参数中作为折叠输入,并调用函数foldMap或任何减少当前事务并将其映射的函数。,这是一种reduce/fold
功能,它还允许您映射您的事务
对象
此函数的作用是跟踪累加器中的当前余额,并转换每个事务
对象:
inline fun <R> List<Transaction>.map(
initial: Int,
transform: (transaction: Transaction, beforeBalance: Int, afterBalance: Int) -> R
): List<R> {
var accumulator = initial
val destination = ArrayList<R>()
for (transaction in this) {
val after = accumulator - transaction.amount
destination.add(transform(transaction, accumulator, after))
accumulator = after
}
return destination
}
为了更通用和更实用,您可以将此行累加器-交易.金额
作为折叠输入移动到函数参数,并调用函数foldMap或任何减少当前交易并将其映射的函数。您在哪里进行这些交易?使用房间?不,我没有使用DB或任何东西。有了Transaction
我指的是银行交易,它是一个银行应用程序。你在哪里做的这些交易?使用房间?不,我没有使用DB或任何东西。使用Transaction
我指的是银行交易,这是一个银行应用程序。非常感谢,伙计,这真是我一直在寻找的答案!非常感谢,这真的是我一直在寻找的答案!
inline fun <R> List<Transaction>.map(
initial: Int,
transform: (transaction: Transaction, beforeBalance: Int, afterBalance: Int) -> R
): List<R> {
var accumulator = initial
val destination = ArrayList<R>()
for (transaction in this) {
val after = accumulator - transaction.amount
destination.add(transform(transaction, accumulator, after))
accumulator = after
}
return destination
}
account.transactions.map(account.balance, {t, b, a-> TransactionEntity(...)})