У меня есть несколько MembershipTypes
в моих приложениях следующим образом:
sealed class MembershipType(val label: String) {
abstract val interestOptions: List<BigDecimal>
abstract val price: BigDecimal
object GOLD : MembershipType("Gold") {
override val price: BigDecimal = BigDecimal(1)
override val interestOptions: List<BigDecimal> = listOf(BigDecimal(100), BigDecimal(200), BigDecimal(300))
}
object SILVER : MembershipType("Silver") {
override val price: BigDecimal = BigDecimal(0.8)
override val interestOptions: List<BigDecimal> = listOf(BigDecimal(300), BigDecimal(400), BigDecimal(500))
}
}
Их свойства - одна цена и список интереса .
Я хочу вычислить все значение (В) / проценты (I) расчетных комбинаций и вернуть список котировок List<Quote>
, используяследующие формула :
(R^max/R) × V × (1 - I/V) × 0.0015 × P
where 1 <= R <= R^max is the risk score with R^max = 3500, V > 0 is the value, I is the interest,
and P is price.
Существуют и другие типы MembershipType
объектов, однако типы GOLD и SILVER имеют наборпредопределенных значений, поэтому я определяю их в QuoteMaker
классе:
class QuoteMaker {
private val membershipToValue: MutableMap<MembershipType, List<BigDecimal>> = mutableMapOf()
init {
membershipToValue.put(MembershipType.GOLD, listOf(BigDecimal(2500), BigDecimal(5000)))
membershipToValue.put(MembershipType.SILVER, listOf(BigDecimal(1000), BigDecimal(2000)))
}
fun generateQuotes(request1: Request) {
val risk = request1.riskRate
val membershipChosen = request1.membershipChosen //list of MemberShipType selected
generateMembershipQuote(riskRate, membershipChosen)
}
private fun generateMembershipQuote(riskRate: Int, membershipChosen: List<MembershipType>) : List<Quote> {
//return membershipChosen.stream()
//.forEach { }...
}
}
Я получаю R (риск) и выбранный список типов членства в объекте Request
.
В generateMembershipQuote()
мне нужно перебрать все выбранные членства, а затем перебрать значения в membershipToValue
для этого типа, вычислить все комбинации для значения / процента и вернуть результат.
Я хочу создать формулу в виде функции , а затем применить для каждого значения / процента и вернуть результат для этого MembershipType
.Как я мог реализовать это?
A Quote
должен иметь информацию об общей цене, стоимости и процентах, используемых для расчета итогов и для какого членства
data class Quote(
val risk: Int, //r
val value: BigDecimal, //v
val interest: BigDecimal, //i
val rate: BigDecimal, //0.0015
val price: BigDecimal //p
) {
fun sum(): BigDecimal {
//sum total
}
}