public Map<String, Object> kaoYanAllStation() { Map<String, Object> map = new HashMap<>(); //获取上个月月份 String month = DateUtil.month(DateUtil.lastMonth()) + 1 + ""; //获取历年同期降水数据 Double historyPreValue = ComData.historyPre().get(month); //获取历年同期温度数据 Double historyTemValue = ComData.historyTem().get(month); //获取去年同期降水数据 List<JSONObject> lastYearPre = prodBookmarkValueService.tableData(ComData.getLastYearDate(), "SUM_PRE_Time_2020"); //获取上月降水数据 List<JSONObject> lastMonthPre = prodBookmarkValueService.tableData(ComData.getLastMonthDate(), "SUM_PRE_Time_2020"); //获取去年同期温度数据 List<JSONObject> lastYearTem = prodBookmarkValueService.tableData(ComData.getLastYearDate(), "AVG_TEM_Avg"); //获取上月温度数据 List<JSONObject> lastMonthTem = prodBookmarkValueService.tableData(ComData.getLastMonthDate(), "AVG_TEM_Avg"); //定义比较器 Comparator<JSONObject> comparator = Comparator.comparing(o -> o.getStr("Station_Id_C")); lastMonthPre.sort(comparator); lastYearPre.sort(comparator); lastYearTem.sort(comparator); lastMonthTem.sort(comparator); // List<String> stationName = lastMonthPre.stream().map(o -> o.getStr("Station_Name")).collect(Collectors.toList()); //上月降水 { //上月降水 List<Double> sumPre = lastMonthPre.stream().map(o -> o.getDouble("SUM_PRE_Time_2020")).collect(Collectors.toList()); //较历年 List<Double> hisPre = lastMonthPre.stream().map(o -> o.getDouble("SUM_PRE_Time_2020") - historyPreValue).collect(Collectors.toList()); //较去年 List<Double> lastYearSumPre = lastYearPre.stream().map(o -> o.getDouble("SUM_PRE_Time_2020")).collect(Collectors.toList()); List<Double> lastYearPreList = new ArrayList<>(); for (int i = 0; i < sumPre.size(); i++) { lastYearPreList.add(sumPre.get(i) - lastYearSumPre.get(i)); } map.put("sumPre", sumPre); map.put("hisPre", hisPre); map.put("lastYearPreList", lastYearPreList); } { //上月温度 List<Double> tem = lastMonthTem.stream().map(o -> o.getDouble("AVG_TEM_Avg")).collect(Collectors.toList()); //较历年 List<Double> hisTem = lastMonthTem.stream().map(o -> o.getDouble("AVG_TEM_Avg") - historyTemValue).collect(Collectors.toList()); //较去年 List<Double> lastYearSumTem = lastYearTem.stream().map(o -> o.getDouble("AVG_TEM_Avg")).collect(Collectors.toList()); List<Double> lastYearTemList = new ArrayList<>(); for (int i = 0; i < tem.size(); i++) { lastYearTemList.add(tem.get(i) - lastYearSumTem.get(i)); } map.put("tem", tem); map.put("hisTem", hisTem); map.put("lastYearTemList", lastYearTemList); } // map.put("stationName", stationName); return map; } 以上代码如何优化.请用中文回答我
时间: 2023-03-04 09:04:50 浏览: 120
java实现Object和Map之间的转换3种方式
首先,根据代码中的注释可以看出,该方法主要是获取各种气象数据,对其进行计算和比较,然后将结果存储在一个 Map 对象中返回。为了优化这段代码,可以考虑以下几个方面:
1. 减少重复代码:在代码中可以看到,获取历年同期降水和温度数据的代码几乎一模一样,只有变量名不同。这种情况下可以考虑将这部分代码抽象成一个单独的方法,并将变量作为参数传入。这样可以避免重复代码,提高代码的可读性和可维护性。
2. 使用 Lambda 表达式和流式处理:在代码中可以看到,有很多地方使用了 foreach 循环来处理集合中的元素,这样会导致代码冗长且不易读。可以使用 Lambda 表达式和流式处理的方式来简化代码,提高可读性和可维护性。
3. 将常量抽象成变量:代码中有很多地方使用了硬编码的常量,例如 "SUM_PRE_Time_2020" 和 "AVG_TEM_Avg" 等,这样会使代码难以维护。可以将这些常量抽象成变量或枚举类型,并在需要使用时引用。
4. 将代码拆分成多个方法:该方法中的代码较为冗长,可以将其拆分成多个方法来提高代码的可读性和可维护性。例如,可以将计算历年同期降水和温度数据的代码、获取去年同期降水和温度数据的代码等拆分成不同的方法。
5. 优化代码逻辑:在代码中可以看到,有些代码逻辑可以进一步优化。例如,在计算历年同期降水和温度数据时,可以将其放在一个方法中计算,避免重复计算。在获取去年同期降水和温度数据时,可以使用更加高效的算法来优化代码。
综上所述,可以通过简化代码、使用 Lambda 表达式和流式处理、抽象常量和变量、拆分代码和优化代码逻辑等方式来优化该方法的代码。
阅读全文