深圳做網(wǎng)站公司地點(diǎn)十大免費(fèi)網(wǎng)站推廣平臺(tái)
需求::前端根據(jù)后端的返回?cái)?shù)據(jù):畫(huà)統(tǒng)計(jì)圖;
1.動(dòng)態(tài)獲取地域數(shù)據(jù)以及數(shù)據(jù)中的平均值,按照平均值降序排序;
說(shuō)明:
X軸是動(dòng)態(tài)的,有對(duì)應(yīng)區(qū)域數(shù)據(jù)則展示;
X軸 區(qū)域數(shù)據(jù)降序排序;
代碼:
@Overridepublic List<Map<String,Object>> getTimeData(HttpServletRequest request, Map<String, Object> paramMap) {List<Map<String,Object>> list = getCountData(request,paramMap);list = list.stream().filter(e -> (e.get("status").equals("關(guān)閉"))).collect(Collectors.toList());List<Map<String,Object>> resultList = new ArrayList<>();String[] reginArr = {"安徽","安順","北京","北美","長(zhǎng)春","長(zhǎng)沙","成都","承德","大連","武漢"};int[] count = new int[reginArr.length];double[] processTimeCount = new double[reginArr.length];double[] processTimeAvg = new double[reginArr.length];for (int i = 0; i < list.size(); i++) {String processTime = String.valueOf(list.get(i).get("processTime"));String region = String.valueOf(list.get(i).get("region")).trim();if(!processTime.contains(".")){list.get(i).put("processTime","0.0");}String processTime2 = String.valueOf(list.get(i).get("processTime"));for (int j = 0; j < reginArr.length; j++) {if(region.equals(reginArr[j].trim())){count[j] = count[j] + 1; // 統(tǒng)計(jì)次數(shù)processTimeCount[j] = processTimeCount[j] + Double.parseDouble(processTime2); // 統(tǒng)計(jì)合并值}}}// 計(jì)算平均值for (int i = 0; i < processTimeCount.length; i++) {processTimeAvg[i] = processTimeCount[i]/count[i];// double類型的數(shù)據(jù)當(dāng)分母的數(shù)值趨近0的時(shí)候,返回來(lái)的數(shù)值就是一個(gè)NAN:if(Double.isNaN(processTimeAvg[i])){processTimeAvg[i] = 0.0;}}// 將數(shù)據(jù)封裝集合for (int i = 0; i < reginArr.length; i++) {Map<String,Object> mapResult = new HashMap<>();String avg = String.valueOf(processTimeAvg[i]);mapResult.put("title",reginArr[i]);mapResult.put("value",avg.substring(0,avg.indexOf(".") +2));resultList.add(mapResult);}// 數(shù)據(jù)過(guò)濾List<Map<String,Object>> finalList = new ArrayList<>();// 過(guò)濾不需要的數(shù)據(jù);for (int i = 0; i < resultList.size(); i++) {String value = String.valueOf(resultList.get(i).get("value"));if(!value.equals("0.0")){finalList.add(resultList.get(i));}}// 排序后最終輸出集合:List<Map<String,Object>> finalList2= new ArrayList<>();Double[] valueSort = new Double[finalList.size()];String[] titleSort = new String[finalList.size()];// 用數(shù)組存儲(chǔ)需要排序的元素;for (int i = 0; i < finalList.size(); i++) {valueSort[i] = Double.parseDouble(String.valueOf(finalList.get(i).get("value")));titleSort[i] = String.valueOf(finalList.get(i).get("title"));}// 多個(gè)數(shù)組排序;BubblSortUtils.bubbleSortDescMultipleDouble(valueSort,titleSort);// 根據(jù)排序結(jié)果封裝List;for (int i = 0; i < valueSort.length; i++) {String ch = String.valueOf(titleSort[i]);for (int j = 0; j < finalList.size(); j++) {String value = String.valueOf(finalList.get(j).get("title"));if(ch.equals(value)){finalList2.add(finalList.get(j));}}}// 添加排序字段:sortValuefor (int i = 0; i < finalList2.size(); i++) {finalList2.get(i).put("sortValue",i+1);}return finalList2;}
Postman接口測(cè)試:
總結(jié): 代碼中有一個(gè)地域的數(shù)組:reginArr ,如果地域字典新增,還需維護(hù)這個(gè)字典,所以還是不夠靈活;參考【Java 動(dòng)態(tài)數(shù)據(jù)統(tǒng)計(jì)圖】動(dòng)態(tài)數(shù)據(jù)統(tǒng)計(jì)思路Demo(動(dòng)態(tài),排序)三(115)和【Java代碼優(yōu)化】for循環(huán),多if條件分支代碼優(yōu)化一(110)中的優(yōu)化方案二;有更靈活計(jì)算邏輯;