【发布时间】:2017-10-06 08:48:03
【问题描述】:
当我有一个对象列表时,我有一个场景让我们假设:
List<A> listofAElements
一个对象有 3 个字段 startDate、endDate 和 rate。 需求在此列表上进行迭代,每当我找到 2 个具有相同 startDate 和 endDate 的元素时,我应该只在列表中保留一个 rate = rate1 + rate2。
这是我这样做的简单代码,但 Sonar 抱怨它的复杂性:
public static void arrangeList(List<TauxPeriodesATDto> tauxPeriodesATDtos){
for (int i =0 ; i < tauxPeriodesATDtos.size() ; i++ ){
for (int j = tauxPeriodesATDtos.size() -1 ; j >= 0; j-- ){
if (j != i){
boolean isStartDatesEquals = tauxPeriodesATDtos.get(i).getDateDebut().equals(tauxPeriodesATDtos.get(j).getDateDebut());
boolean isEndDatesEquals = tauxPeriodesATDtos.get(i).getDateFin().equals(tauxPeriodesATDtos.get(j).getDateFin());
if (isStartDatesEquals && isEndDatesEquals ) {
BigDecimal itauxPrime = tauxPeriodesATDtos.get(i).getTauxPrimeAT();
BigDecimal jTauxPrime = tauxPeriodesATDtos.get(j).getTauxPrimeAT();
BigDecimal sommeDesTaux = itauxPrime.add(jTauxPrime);
tauxPeriodesATDtos.get(i).setTauxPrimeAT(sommeDesTaux);
tauxPeriodesATDtos.remove(j);
}
}
}
}
}
您对更好的方法有什么建议吗?
【问题讨论】:
-
Sonar 可能会抱怨,因为函数中有超过 3 个
if,for,while,else。我建议您查看是否可以减少循环或 if 条件。或者使用 Java 的 Stream API 重构代码
标签: java algorithm collections sonarqube time-complexity