代码之家  ›  专栏  ›  技术社区  ›  M06H

实施不同类型的价格矩阵

  •  1
  • M06H  · 技术社区  · 6 年前
    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
    

    在我的应用程序中,我有一些成员类型。我想提前计算以上所有可能的价格组合,并在一个对象中为每个成员提出。

    假设一个用户选择黄金会员,我期待着计算每一个组合 并以某种对象呈现给用户。。

    用户可以选择多个成员资格,如果他们愿意的话,在这种情况下,它应该显示两个成员资格的所有价值/费率组合。

    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
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Eldar Agalarov    6 年前

    好吧,我不知道你到底需要什么计算逻辑。但我提供了一个例子,你如何做到这一点:

    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])
        }
    }