Membership || interest rate
Gold || 0.12, 0.20, 0.3
Silver || 0.13, 0.24, 0.3
Bronze || 10.1, 0.2, 0.3
Membership || value rate
Gold || 10, 20, 30
Silver || 10, 50, 40
在我的应用中,我有一些会员类型。我想提前计算以上所有可能的价格组合,并针对每个成员将其显示在一个对象中。
假设用户选择了金牌会员身份,我希望计算出(价值x利率)的每种组合,并以某种对象的形式呈现给用户。
如何实现此功能以及可以使用哪些数据结构和设计?
如果用户愿意,可以选择多个成员身份,在这种情况下,它应该显示两个成员身份的所有值/费率组合。
例如,我有这样的内容:
sealed class MembershipType(val label: String) {
abstract val interestRates: List<BigDecimal>
abstract val valueOptions: List<BigDecimal>
object SILVER : MembershipType("Silver") {
override val valueOptions: List<BigDecimal> =
listOf<BigDecimal>(
BigDecimal.valueOf(10),
BigDecimal.valueOf(50),
BigDecimal.valueOf(40))
}...
我具有接收列表的功能,如下所示:
fun calculateQuote(score: Int, memberShipSelected: List<MembershipType>): Quote {//TODO}
对于列表中的每种成员资格类型,提取值和费率并计算所有可能的组合。
黄金组合
rates
Values 0.12 0.20 0.3
10 10*0.12 10*0.20 10*0.3
20 20*0.12 20*0.20 20*0.3
30 30*0.12 30*0.20 30*0.3
答案 0 :(得分:1)
好吧,我不知道您到底需要什么计算逻辑。但我提供了示例,您如何做到这一点:
data class Result(val value: BigDecimal, val rate: BigDecimal, val result: BigDecimal)
sealed class Membership {
abstract val interestRates: List<BigDecimal>
abstract val valueOptions: List<BigDecimal>
fun calcCombinations() = this.valueOptions.map { vo ->
this.interestRates.map {
Result(vo, it, vo * it)
}
}
object SILVER : Membership() {
override val interestRates = listOf(BigDecimal("0.13"), BigDecimal("0.24"), BigDecimal("0.3"))
override val valueOptions = listOf(BigDecimal(10), BigDecimal(50), BigDecimal(40))
}
object GOLD : Membership() {
override val interestRates = listOf(BigDecimal("0.12"), BigDecimal("0.2"), BigDecimal("0.3"))
override val valueOptions = listOf(BigDecimal(10), BigDecimal(20), BigDecimal(30))
}
}
object Main {
@JvmStatic
fun main(args: Array<String>) {
println(GOLD.calcCombinations())
println(SILVER.calcCombinations())
val membershipToCombinations = setOf(GOLD, SILVER).associateBy({
it
}, {
it.calcCombinations()
})
println(membershipToCombinations[SILVER])
println(membershipToCombinations[GOLD])
}
}