Java 代码优化:从 JSON 解析到数据处理
Java 代码优化:从 JSON 解析到数据处理
本文将介绍如何优化一段 Java 代码,从 JSON 解析到数据处理,提高代码的可读性和可维护性,并利用 Java 8 的新特性简化代码。
原始代码
public JSONArray getGeometryData(String geometryUrl, GisDto gisDto) {
String response = null;
Dict dict = null;
try {
response = HttpUtil.createGet(geometryUrl).form(gisDto).execute().body();
dict = JSON.parseObject(response, Dict.class);
} catch (Exception e) {
log.error(e.getMessage());
throw e;
}
JSONArray jsonArray = (JSONArray) dict.get('data');
JSONArray resultArray = new JSONArray();
for (Object object : jsonArray) {
JSONObject jsonObject = (JSONObject) object;
JSONObject geometry = jsonObject.getJSONObject('geometry');
JSONArray pointsArray = geometry.getJSONArray('points');
JSONArray innerArray = new JSONArray();
for (Object obj : pointsArray) {
JSONArray innerPointsArray = (JSONArray) obj;
JSONArray pointArray = new JSONArray();
for (Object innerObj : innerPointsArray) {
JSONObject pointObj = (JSONObject) innerObj;
double x = pointObj.getDouble('x');
double y = pointObj.getDouble('y');
JSONArray innerPointArray = new JSONArray();
innerPointArray.add(x);
innerPointArray.add(y);
pointArray.add(innerPointArray);
}
innerArray.add(pointArray);
}
geometry.put('points', innerArray);
resultArray.add(jsonObject);
}
return resultArray;
}
优化后的代码
public JSONArray getGeometryData(String geometryUrl, GisDto gisDto) {
try (CloseableHttpResponse response = HttpUtil.createGet(geometryUrl).form(gisDto).execute()) {
String responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
Dict dict = JSON.parseObject(responseBody, Dict.class);
JSONArray jsonArray = dict.getJSONArray('data');
return jsonArray.stream()
.map(obj -> (JSONObject) obj)
.peek(jsonObject -> {
JSONObject geometry = jsonObject.getJSONObject('geometry');
JSONArray pointsArray = geometry.getJSONArray('points');
JSONArray innerArray = new JSONArray();
pointsArray.forEach(obj -> {
JSONArray innerPointsArray = (JSONArray) obj;
JSONArray pointArray = new JSONArray();
innerPointsArray.forEach(innerObj -> {
JSONObject pointObj = (JSONObject) innerObj;
double x = pointObj.getDouble('x');
double y = pointObj.getDouble('y');
JSONArray innerPointArray = new JSONArray();
innerPointArray.add(x);
innerPointArray.add(y);
pointArray.add(innerPointArray);
});
innerArray.add(pointArray);
});
geometry.put('points', innerArray);
})
.collect(Collectors.toCollection(JSONArray::new));
} catch (IOException e) {
log.debug(e.getMessage());
return new JSONArray();
}
}
优化说明
- 使用 try-with-resources 来关闭资源,避免资源泄漏:在
try语句块中使用CloseableHttpResponse对象,并在try语句块结束后自动关闭资源,避免资源泄漏。 - 将 JSON 解析和数据处理分离,提高代码的可读性和可维护性:将 JSON 解析和数据处理分开,代码更易于理解和维护。
- 使用 Lambda 表达式简化循环遍历操作,提高代码的简洁性和可读性:使用 Lambda 表达式简化循环遍历操作,代码更简洁易读。
- 使用 Java 8 的 Stream API 来进行数据处理,进一步简化代码:使用 Stream API 进行数据处理,代码更加简洁高效。
- 将方法签名中的 Exception 去掉,避免向上抛出不必要的异常:将方法签名中的
Exception去掉,避免向上抛出不必要的异常。 - 将日志记录从错误级别改为调试级别,避免在生产环境中记录过多无用的错误日志:将日志记录级别改为
debug,避免在生产环境中记录过多无用的错误日志。
总结
通过以上优化,代码更加简洁易读,易于维护,并且避免了资源泄漏和不必要的异常抛出。这只是代码优化的一个示例,我们可以根据不同的场景使用不同的优化技巧,以提高代码质量和效率。
原文地址: https://www.cveoy.top/t/topic/oiiI 著作权归作者所有。请勿转载和采集!