需求:
- 有一个List<Map<String.Object>>,存储了区域的数据,
 数据是根据用户查询条件进行显示的;所以查询的数据是动态的;
- 按区域维度统计每个区域出现的次数,并且按照次数的大小排序(升序);
- 区域是动态的,有次数则返回;没有则不返回;
分析:
 后端给前端返回值:不能用对象返回,因为数据是动态的,key是不固定的;
 可以使用:List<Map<String,Object>>返回;Map中key为区域;value为统计次数;
Demo案例:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class day07 {
	public static void main(String[] args) {
		
		List<Map<String,Object>> list = new ArrayList<>();
		Map<String,Object> map9 = new HashMap<>();
		map9.put("region","灞桥区");
		Map<String,Object> map10 = new HashMap<>();
		map10.put("region","灞桥区");
		Map<String,Object> map11 = new HashMap<>();
		map11.put("region","灞桥区");
		Map<String,Object> map12 = new HashMap<>();
		map12.put("region","灞桥区");
		Map<String,Object> map13 = new HashMap<>();
		map13.put("region","灞桥区");
		Map<String,Object> map1 = new HashMap<>();
		map1.put("region","长安区");
		Map<String,Object> map2 = new HashMap<>();
		map2.put("region","雁塔区");
		Map<String,Object> map3 = new HashMap<>();
		map3.put("region","莲湖区");
		Map<String,Object> map4 = new HashMap<>();
		map4.put("region","碑林区");
		Map<String,Object> map5 = new HashMap<>();
		map5.put("region","莲湖区");
		Map<String,Object> map6 = new HashMap<>();
		map6.put("region","未央区");
		Map<String,Object> map7 = new HashMap<>();
		map7.put("region","未央区");
		Map<String,Object> map8 = new HashMap<>();
		map8.put("region","未央区");
		list.add(map9);
		list.add(map10);
		list.add(map11);
		list.add(map12);
		list.add(map13);
		list.add(map1);
		list.add(map2);
		list.add(map3);
		list.add(map4);
		list.add(map5);
		list.add(map6);
		list.add(map7);
		list.add(map8);
		
		List<Map<String,Object>> listResult = new ArrayList<>();
        List<Map<String,Object>> listFinal= new ArrayList<>();
        String[] regionlArr = {"灞桥区","长安区","雁塔区","莲湖区","碑林区","未央区","新城区"};
        int[] arr = new int[regionlArr.length];
        // 数组接收:统计每个区域出现的次数;
        for (int i = 0; i < list.size(); i++) {
            String re = String.valueOf(list.get(i).get("region"));
            for (int j = 0; j < regionlArr.length; j++) {
                if(re.equals(regionlArr[j])){
                    arr[j] = arr[j] + 1;
                }
            }
        }
        // List接收:动态获取数据,过滤掉次数为0的数据;
        for (int i = 0; i < regionlArr.length; i++) {
            Map<String,Object> map = new HashMap<>();
            String title = regionlArr[i];
            int value = arr[i];
            if(!String.valueOf(value).equals("0")){
                map.put("title",title);
                map.put("value",value);
                listResult.add(map);
            }
        }
        System.out.println("动态获取匹配后的数据:"+listResult);
        int[] valueSort = new int[listResult.size()];
        String[] regionSort = new String[listResult.size()];
        
        // 获取次数用于排序
        for (int i = 0; i < listResult.size(); i++) {
            valueSort[i] = Integer.valueOf(String.valueOf(listResult.get(i).get("value")));
            regionSort[i] = String.valueOf(listResult.get(i).get("title"));
        }
        // 根据次数排序 
        bubbleSortAsc(valueSort,regionSort); 
        // 根据排序返回数据
        for (int i = 0; i < regionSort.length; i++) {
        	String ch = String.valueOf(regionSort[i]);
            for (int j = 0; j < listResult.size(); j++) {
                String value = String.valueOf(listResult.get(j).get("title"));
                if(ch.equals(value)){
                    listFinal.add(listResult.get(j));
                }
            }
        }
        System.out.println("最终输出数据:"+listFinal);         
	}
	for (int i = 0; i < listFinal.size(); i++) {
        listFinal.get(i).put("sortValue",i+1);
    }
	
	/*
     * Int类型:冒泡排序(升序)
     *
     */
    public static void bubbleSortAsc(int[] arr,String[]arr2) {
	    int temp;  // 定义一个临时变量
	    String temp2;  // 定义一个临时变量
	    for(int i=0;i<arr.length-1;i++){  // 冒泡趟数
	        for(int j=0;j<arr.length-i-1;j++){
	            if(arr[j+1]<arr[j]){
	                temp = arr[j];
	                arr[j] = arr[j+1];
	                arr[j+1] = temp;
	                
	                temp2 = arr2[j];
	                arr2[j] = arr2[j+1];
	                arr2[j+1] = temp2;
	            }
	        }
	    }
	} 
    
}
测试输出:
动态获取匹配后的数据:
[{title=灞桥区, value=5}, {title=长安区, value=1}, {title=雁塔区, value=1}, {title=莲湖区, value=2}, {title=碑林区, value=1}, {title=未央区, value=3}]
最终输出数据:
[{sortValue=1, title=长安区, value=1}, {sortValue=2, title=雁塔区, value=1}, {sortValue=3, title=碑林区, value=1}, {sortValue=4, title=莲湖区, value=2}, {sortValue=5, title=未央区, value=3}, {sortValue=6, title=灞桥区, value=5}]
案例二:
 需求:前端根据后端的返回数据:画统计图;
X轴是动态的,有对应区域数据则展示;
 X轴 区域数据降序排序;
 
 代码逻辑:
	// Service  
	List<Map<String,Object>> getRegionData(HttpServletRequest request,Map<String, Object> paramMap);
	// ServiceImpl  
	@Override
    public List<Map<String,Object>> getRegionData(HttpServletRequest request, Map<String, Object> paramMap) {
         List<Map<String,Object>> list = getCountData(request,paramMap); // 封装统计查询的数据(与数据库交互)
        List<Map<String,Object>> listResult = new ArrayList<>();
        List<Map<String,Object>> listFinal= new ArrayList<>();
        String[] problemRevealArr = {"长安区","雁塔区","灞桥区","莲湖区","未央区"};
        int[] arr = new int[problemRevealArr.length];
        for (int i = 0; i < list.size(); i++) {
            String problemReveal = String.valueOf(list.get(i).get("waysOfProblemReveal"));
            for (int j = 0; j < problemRevealArr.length; j++) {
                if(problemReveal.equals(problemRevealArr[j])){
                    arr[j] = arr[j] + 1;
                }
            }
        }
        for (int i = 0; i < problemRevealArr.length; i++) {
            Map<String,Object> map = new HashMap<>();
            String title = problemRevealArr[i];
            int value = arr[i];
            if(!String.valueOf(value).equals("0")){
                map.put("title",title);
                map.put("value",value);
                listResult.add(map);
            }
        }
        int[] valueSort = new int[listResult.size()];
        String[] titleSort = new String[listResult.size()];
        for (int i = 0; i < listResult.size(); i++) {
            valueSort[i] = Integer.valueOf(String.valueOf(listResult.get(i).get("value")));
            titleSort[i] = String.valueOf(listResult.get(i).get("title"));
        }
        BubbleSort(valueSort,titleSort);
        for (int i = 0; i < valueSort.length; i++) {
            String ch = String.valueOf(titleSort[i]);
            for (int j = 0; j < listResult.size(); j++) {
                String value = String.valueOf(listResult.get(j).get("title"));
                if(ch.equals(value)){
                    listFinal.add(listResult.get(j));
                }
            }
        }
        return listFinal;
    }
	
	/*
     * 冒泡排序(降序)
     *
     */
    public static void BubbleSort(int[] arr,String[]arr2) {
        int temp;
        String temp2;
        for (int i=0;i<arr.length;i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i] >= arr[j]) {
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                    temp2 = arr2[i];
                    arr2[i] = arr2[j];
                    arr2[j] = temp2;
                }
            }
        }
    }
Postman接口测试:
 













![[10min速通]STM32CubemMX配置W25Q128](https://img-blog.csdnimg.cn/img_convert/7f049f26311e38e1de30af7a347e178b.png)




