java在获取最高值和最低值时统一代码
我的IDE给了我重复代码的警告,现在我试图找出有没有办法统一或找到这两种方法的共同抽象,这两种方法在结构上非常相似,但做的事情却相反?我自己想不出来。Thx
public double getLowestCurrencyRateInTheCurrentMonth(String baseCurrency, String targetCurrency) {
Map<String, Map<String, Double>> rates = getAllRatesInCurrentMonth(baseCurrency);
double lowestRate = Double.MAX_VALUE;
for(Map<String, Double> ratesByDate : rates.values()){
double baseCurrecyRateToTargetCurrency = ratesByDate.get(targetCurrency);
if(baseCurrecyRateToTargetCurrency < lowestRate){
lowestRate = baseCurrecyRateToTargetCurrency;
}
}
return lowestRate;
}
public double getHighestCurrencyRateInTheCurrentMonth(String baseCurrency, String targetCurrency) {
Map<String, Map<String, Double>> rates = getAllRatesInCurrentMonth(baseCurrency);
double highestRate = Double.MIN_VALUE;
for(Map<String, Double> ratesByDate : rates.values()){
double baseCurrecyRateToTargetCurrency = ratesByDate.get(targetCurrency);
if(baseCurrecyRateToTargetCurrency > highestRate){
highestRate = baseCurrecyRateToTargetCurrency;
}
}
return highestRate;
}
# 1 楼答案
我同意前面的几个答案,并且相信它们可以很好地被使用
就我个人而言,我会创建一个统一的方法来处理公共逻辑流,然后有两个描述性方法称之为“公共逻辑方法”
因此,我不必将布尔标志作为参数处理(在本例中为双标志),我有机会表示哪个名称最适合该方法,最后我将所有逻辑流集中在一个方法中
示例:
# 2 楼答案
一个简单的解决方案如下: 给函数一个rate,它是
double.MIN_VALUE
或double.MAX_VALUE
,并将其称为rate
。在函数中,您可以检查速率是double.MIN_VALUE
还是double.MAX_VALUE
。或者只需检查rate
是更小还是更大baseCurrecyRateToTargetCurrency
。我不太确定它是常数还是非常数。这将是一个例子:我假设
baseCurrecyRateToTargetCurrency
的值与在函数中以相同的方式检索的值相同。是这样吗# 3 楼答案
在我看来,里面有很多不必要的代码。使用流可以更好地实现同样的效果。看起来是这样的: