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();
    }
}

优化说明

  1. 使用 try-with-resources 来关闭资源,避免资源泄漏:在 try 语句块中使用 CloseableHttpResponse 对象,并在 try 语句块结束后自动关闭资源,避免资源泄漏。
  2. 将 JSON 解析和数据处理分离,提高代码的可读性和可维护性:将 JSON 解析和数据处理分开,代码更易于理解和维护。
  3. 使用 Lambda 表达式简化循环遍历操作,提高代码的简洁性和可读性:使用 Lambda 表达式简化循环遍历操作,代码更简洁易读。
  4. 使用 Java 8 的 Stream API 来进行数据处理,进一步简化代码:使用 Stream API 进行数据处理,代码更加简洁高效。
  5. 将方法签名中的 Exception 去掉,避免向上抛出不必要的异常:将方法签名中的 Exception 去掉,避免向上抛出不必要的异常。
  6. 将日志记录从错误级别改为调试级别,避免在生产环境中记录过多无用的错误日志:将日志记录级别改为 debug,避免在生产环境中记录过多无用的错误日志。

总结

通过以上优化,代码更加简洁易读,易于维护,并且避免了资源泄漏和不必要的异常抛出。这只是代码优化的一个示例,我们可以根据不同的场景使用不同的优化技巧,以提高代码质量和效率。

Java 代码优化:从 JSON 解析到数据处理

原文地址: https://www.cveoy.top/t/topic/oiiI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录