public String gaugeParamsString(String value2, CalculationModelVo calculationInfo) { int value = 0; if (calculationInfo.getReservedBits() == 0) { int ret[] = new int[calculationInfo.getGaugeParam().length()]; StringTokenizer toKenizer = new StringTokenizer(calculationInfo.getGaugeParam(), ","); int i = 0; while (toKenizer.hasMoreElements()) { ret[i++] = Integer.valueOf(toKenizer.nextToken()); } //向上 if (calculationInfo.getGaugeCode().equals("0")) { int closest = Integer.MAX_VALUE; for (int j = 0; j < ret.length; j++) { if (ret[j] >= Integer.parseInt(value2) && ret[j] < closest) { closest = ret[j]; } } //赋值给value value = closest; } //向下 if (calculationInfo.getGaugeCode().equals("1")) { int closest = Integer.MIN_VALUE; for (int j = 0; j < ret.length; j++) { if (ret[j] >= Integer.parseInt(value2) && ret[j] < closest) { closest = ret[j]; } } //赋值给value value = closest; } } return String.valueOf(value); } 优化一下这段代码
时间: 2024-02-10 08:25:06 浏览: 132
要优化这段代码,可以考虑以下几个方面:
1. 减少重复代码:在向上和向下取值的逻辑中,有很多重复的代码。可以将这部分相同的代码提取出来,减少重复性的工作。
2. 使用foreach循环:在遍历数组时,可以使用foreach循环代替普通for循环,使代码更简洁易读。
3. 减少不必要的变量和判断:在取最近值的逻辑中,可以直接使用变量closest来保存当前最近值,而不需要使用最大值或最小值来初始化closest。此外,可以使用一个boolean变量来记录向上或向下的情况,避免重复判断。
优化后的代码如下:
```java
public String gaugeParamsString(String value2, CalculationModelVo calculationInfo) {
int value = 0;
if (calculationInfo.getReservedBits() == 0) {
int ret[] = Arrays.stream(calculationInfo.getGaugeParam().split(","))
.mapToInt(Integer::parseInt)
.toArray();
int closest = calculationInfo.getGaugeCode().equals("0") ? Integer.MAX_VALUE : Integer.MIN_VALUE;
boolean isUpward = calculationInfo.getGaugeCode().equals("0");
for (int num : ret) {
if ((isUpward && num >= Integer.parseInt(value2) && num < closest) ||
(!isUpward && num <= Integer.parseInt(value2) && num > closest)) {
closest = num;
}
}
value = closest;
}
return String.valueOf(value);
}
```
优化后的代码使用了Java 8中的流式操作来将字符串拆分为整数数组,同时使用三元运算符减少了重复的判断和变量初始化。同时,使用foreach循环遍历数组,使代码更加简洁易读。
阅读全文