我有下一个代码:
private static final List<String> VALUES =
ImmutableList.of("15", "545", "856", "5", "4558");
public int getAmountOfUnits(String value, int duration) {
if (VALUES.contains(value)) {
if (duration >= 1 && duration <= 7)
return 0;
if (duration >= 8 && duration <= 82) {
return getUnitAmount(duration, 22, 15, 1);
}
if (duration >= 83 && duration <= 90)
return 7;
if (duration >= 91) {
return getUnitAmount(duration, 114, 24, 7);
}
}
if (value.equalsIgnoreCase("3") && duration >= 0) {
return getUnitAmount(duration, 15, 16, 1);
}
if (value.equalsIgnoreCase("4") && duration >= 0) {
return getUnitAmount(duration, 59, 60, 0);
}
return 1;
}
列表项
private int getUnitAmount(int input, int startRange, int increment, int startUnit) {
while (startRange < input) {
startUnit++;
startRange += increment;
}
return startUnit;
}
如果有陈述,我如何避免出现此多行?
答案 0 :(得分:0)
IMO几乎没有什么可以保留的,因为不同的条件总会涉及不同的代码。您可以重新组织四个持续时间的测试,以二分法搜索,但是收益很小。
答案 1 :(得分:0)
您将需要那些if
条件,但是您可以减少一些检查并生成更紧凑的代码。性能差异虽然可以忽略不计。
public int getAmountOfUnits(String value, int duration) {
if(duration < 0) return 1; // here you can return whatever you intend to do.
if (VALUES.contains(value)) {
if (duration <= 7){
return 0;
}else if (duration <= 82) {
return getUnitAmount(duration, 22, 15, 1);
}else if (duration <= 90){
return 7;
}else{
return getUnitAmount(duration, 114, 24, 7);
}
}
if(value.equals("3")){
return getUnitAmount(duration, 15, 16, 1);
}else if(value.equals("4")){
return getUnitAmount(duration, 59, 60, 0);
}
return 1;
}