Вложен для оптимизации циклов - PullRequest
0 голосов
/ 02 февраля 2020

Есть ли способ оптимизировать код ниже:

  public BigDecimal calculate(Policy policy) {
    BigDecimal total = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_EVEN);
    for (PolicyObject policyObject : policy.getPolicyObjects()) {
      for (PolicySubObject policySubObject : policyObject.getPolicySubObjects()) {
        for (Risk risk : policySubObject.getRisks()) {
          for (Rate rate : risk.getRates()) {
            // CompareTo returns -1 if BigDecimal is smaller then to compared Big decimal
            // 0 if equals and 1 if greater.
            if (policySubObject.getSumInsured().compareTo(rate.getRangeStart()) >= 0
                && policySubObject.getSumInsured().compareTo(rate.getRangeEnd()) < 0) {
              total = total.add(policySubObject.getSumInsured().multiply(rate.getPremiumRate()));
            }
          }
        }
      }
    }
    return total;
  }

4 вложенных цикла вместе с условием выглядят очень тревожно. В конечном счете, для расчета премии необходимо go по каждой ставке, но я не смог найти лучшего способа сделать это.

1 Ответ

0 голосов
/ 12 апреля 2020

Кажется, здесь нет очевидного решения, если здесь нужны петли, то от них невозможно избавиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...