优化这段代码 int index = 3; for (Object data : dataList) { StringBuilder inner = new StringBuilder(); String excelStr = JSONObject.toJSONString(data, SerializerFeature.WriteMapNullValue); JSONObject object = JSONObject.parseObject(excelStr, Feature.OrderedField, Feature.IgnoreNotMatch); List<Object> valueList = Lists.newArrayList(object.values()); boolean bool = false; inner.append("第").append(index).append("行:"); if (Objects.isNull(valueList.get(0))) { bool = true; inner.append("手机号不能为空").append(";"); } for (int i = 1; i <= variableCount; i++) { Object obj = (valueList.size() - 1) >= (i + 1) ? valueList.get(i + 1) : null; if (Objects.isNull(obj)) { bool = true; inner.append("变量").append(i).append("不能为空").append(";"); } } if (bool) { if (inner.toString().endsWith(";")) { inner.setLength(inner.length() - 1); } if (!inner.toString().endsWith("\r\n")) { inner.append("\r\n"); } error.append(inner); } index++; }
时间: 2024-02-10 21:07:15 浏览: 125
下面是一些可能的优化建议:
1. 使用 forEach 循环代替 for 循环,可以使代码更简洁:
```java
int index = 3;
for (Object data : dataList) {
// ...
index++;
}
```
改为:
```java
int index = 3;
for (Object data : dataList) {
// ...
++index;
}
```
2. 将对象转换为 JSON 格式时,可以直接使用 `JSONObject` 的静态方法 `toJSONString`,而无需创建 StringBuilder 和使用 `SerializerFeature`:
```java
String excelStr = JSONObject.toJSONString(data);
```
3. 在解析 JSON 时,可以直接获取对象的值列表,而无需使用 `JSONObject` 的 `values` 方法和转换为列表:
```java
List<Object> valueList = new ArrayList<>(object.values());
```
4. 在判断变量是否为空时,可以使用 Java 8 的 Stream API 和 Lambda 表达式,使代码更简洁:
```java
boolean hasNull = IntStream.rangeClosed(2, variableCount + 1)
.mapToObj(valueList::get)
.anyMatch(Objects::isNull);
if (Objects.isNull(valueList.get(0)) || hasNull) {
// ...
}
```
这里使用 `IntStream.rangeClosed` 创建了一个整数流,从2到`variableCount+1`(包括边界);使用 `mapToObj` 将每个索引对应的对象转换为流中的元素;使用 `anyMatch` 判断流中是否有 null 元素。
5. 在拼接错误信息时,可以使用 `String.join` 方法代替 StringBuilder,使代码更简洁:
```java
List<String> errorMsgs = new ArrayList<>();
if (Objects.isNull(valueList.get(0)) || hasNull) {
errorMsgs.add("手机号不能为空");
}
IntStream.rangeClosed(2, variableCount + 1)
.filter(i -> Objects.isNull(valueList.get(i)))
.forEach(i -> errorMsgs.add("变量" + (i - 1) + "不能为空"));
if (!errorMsgs.isEmpty()) {
error.append("第").append(index).append("行:")
.append(String.join(";", errorMsgs)).append("\r\n");
}
```
这里使用 `IntStream.rangeClosed` 创建了一个整数流,从2到`variableCount+1`(包括边界);使用 `filter` 过滤出 null 元素;使用 `forEach` 将每个索引对应的错误信息添加到列表中。最后使用 `String.join` 将列表中的所有元素用分号连接,并拼接到错误信息中。
阅读全文