【Java 动态数据统计图】前后端对接数据格式(Map返回数组格式数据)六(120)

这篇具有很好参考价值的文章主要介绍了【Java 动态数据统计图】前后端对接数据格式(Map返回数组格式数据)六(120)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明
前端使用:vue3.0 ECharts可视化库
前后端对接数据格式:无非就是前端把后端返回的数据处理为自己想要的格式,或者,后端给前端处理好想要的格式;
针对前后端的柱状图,趋势图等数据对接,前端一般需要数组格式;
我们之前返回的数据格式是LIst Map
举例:动态数据统计思路案例(动态,排序,containsKey)五(117)
如图所示;
【Java 动态数据统计图】前后端对接数据格式(Map返回数组格式数据)六(120),java,java,开发语言
而我们需要数组格式:
后端代码处理:

	@Override
    public 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("关闭"))).collect(Collectors.toList());

        // Map存储:(region,num),num为相同region的加和;
        Map<String,Object> regionMap = new LinkedHashMap<>();

        // Map存储:(region,统计次数),统计次数为相同region的次数;
        Map<String,Object> countMap = new LinkedHashMap<>();

        for (int i = 0; i < list.size(); i++) {
            String region = String.valueOf(list.get(i).get("region"));
            String num = String.valueOf(list.get(i).get("processTime"));
            // regionMap包含region:将region当作key;
            if(regionMap.containsKey(region)) {
                String key = region;
                String value = String.valueOf(regionMap.get(key));  // 从regionMap获取value值;即地域对应的num值;
                regionMap.put(region, Double.parseDouble(value) + Double.parseDouble(num));
            }
            else {  // 不包含,直接存进去
                regionMap.put(region, num);
            }
            // countMap包含region:将region当作key;
            if(countMap.containsKey(region)) {
                String key2 = region;
                String value2 = String.valueOf(countMap.get(key2));  // 从countMap获取value值;即地域对应的统计次数值;
                countMap.put(region, Integer.valueOf(value2) + 1);
            }
            else {  // 不包含,直接存进去
                countMap.put(region, 1);
            }
        }

        List<String> regionList = new LinkedList<String>();  // 地域
        List<String> numberList = new LinkedList<String>();  // 数值
        List<String> regionList2 = new ArrayList<String>();  // 地域2
        List<String> countList = new LinkedList<String>();  // 统计次数
        List<String> avgList = new LinkedList<String>();  // 平均值
        // 封装地域集合:(北京,数值和)
        Iterator<Map.Entry<String, Object>> it = regionMap.entrySet().iterator();
        while(it.hasNext()){
            Map.Entry<String, Object> entry = it.next();
            String key = entry.getKey();
            String value = String.valueOf(entry.getValue());
            regionList.add(key);
            numberList.add(value);
        }
        // 封装统计次数集合:(北京,统计次数)
        Iterator<Map.Entry<String, Object>> it2 = countMap.entrySet().iterator();
        while(it2.hasNext()){
            Map.Entry<String, Object> entry = it2.next();
            String key = entry.getKey();
            String value = String.valueOf(entry.getValue());
            regionList2.add(key);
            countList.add(value);
        }
        // 计算平均值:封装集合avgList
        if(regionList.size() == numberList.size() && regionList2.size() == countList.size() && regionList.size() == regionList2.size()) {
        	for (int i = 0; i < regionList.size(); i++) {
        		String reg1 = regionList.get(i);
        		double fenzi = Double.parseDouble(numberList.get(i));
        		for (int j = 0; j < regionList2.size(); j++) {
        			String reg2 = regionList2.get(j);
        			if(reg1.equals(reg2)) {
        				int fenmu = Integer.valueOf(countList.get(j));
                		if(fenmu > 0) {
                			Double x =  fenzi/fenmu;
                			// double类型的数据当分母的数值趋近0的时候,返回来的数值就是一个NAN:
                			if(Double.isNaN(x)){
                				x = 0.0;
                			}
                			avgList.add(String.valueOf(x));
                		}
        			}
				}
			}
        }
        // 最终输出集合:
        List<Map<String,Object>> resultList = new ArrayList<>();
        // 根据地域集合与平均值集合封装新集合resultList:
        if(regionList.size() == avgList.size()) {
            for (int i = 0; i < regionList.size(); i++) {
                Map<String,Object> map = new HashMap<>();
                map.put("title",regionList.get(i));
                map.put("value",avgList.get(i).substring(0,avgList.get(i).indexOf(".")+2));
                resultList.add(map);
            }
        }
        //排序:value值大的Map往前排,斌且插入新字段:sortValue,代表序列;
        Double[] valueSort = new Double[resultList.size()];
        String[] titleSort = new String[resultList.size()];
        // 排序后最终输出集合:
        List<Map<String,Object>> listFinal= new ArrayList<>();
        // 获取排序的数组:
        for (int i = 0; i < resultList.size(); i++) {
            valueSort[i] = Double.parseDouble(String.valueOf(resultList.get(i).get("value")));
            titleSort[i] = String.valueOf(resultList.get(i).get("title"));
        }
        // 数组排序:
        BubblSortUtils.bubbleSortDescMultipleDouble(valueSort,titleSort);
        // 数组封装listFinal:
        for (int i = 0; i < valueSort.length; i++) {
            String ch = String.valueOf(titleSort[i]);
            for (int j = 0; j < resultList.size(); j++) {
                String value = String.valueOf(resultList.get(j).get("title"));
                if(ch.equals(value)){
                    listFinal.add(resultList.get(j));
                }
            }
        }
        // listFinal中添加排序字段:sortValue
        String[] A = new String[listFinal.size()];
        String[] B = new String[listFinal.size()];
        for (int i = 0; i < listFinal.size(); i++) {
            listFinal.get(i).put("sortValue",listFinal.size()-i);
            A[i] = String.valueOf(listFinal.get(i).get("title"));
            B[i] = String.valueOf(listFinal.get(i).get("value"));
        }
        Map<String,Object> restMap = new HashMap<>();
        restMap.put("title",A);
        restMap.put("value",B);
        return restMap;
	}
	

备注:以上代码可简化处理,写这么多是为了明确每个过程,提供数据处理的拓展思路;
代码修改位置
1.最终返回值由List Map改为数组返回:
2.修改接口返回值类型:由List Map修改为Map
最后返回值修改如下:

	// listFinal中添加排序字段:sortValue
    String[] A = new String[listFinal.size()];
    String[] B = new String[listFinal.size()];
    for (int i = 0; i < listFinal.size(); i++) {
        listFinal.get(i).put("sortValue",listFinal.size()-i);
        A[i] = String.valueOf(listFinal.get(i).get("title"));
        B[i] = String.valueOf(listFinal.get(i).get("value"));
    }
    Map<String,Object> restMap = new HashMap<>();
    restMap.put("title",A);
    restMap.put("value",B);
    return restMap;

Postman测试:
【Java 动态数据统计图】前后端对接数据格式(Map返回数组格式数据)六(120),java,java,开发语言
这样前端就可以直接获取使用了,返回的数组里面也是经过排序处理的;文章来源地址https://www.toymoban.com/news/detail-682032.html

到了这里,关于【Java 动态数据统计图】前后端对接数据格式(Map返回数组格式数据)六(120)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java项目-苍穹外卖-Day11-Apache ECharts数据统计

    主要是以下四项的统计,以不同形式的图形进行展示 自己去网站上看一哈,我不太懂前端 com.sky.controller.admin.ReportController com.sky.service.impl.ReportServiceImpl.java orderMapper orderMapper.xml Reportcontroller ReportServiceImpl orderMapper.xml reportController ReportServiceImpl orderMapper.xml

    2024年02月09日
    浏览(36)
  • Java8用Stream流一行代码实现数据分组统计,排序,最大值、最小值、平均值、总数、合计

    Java8对数据处理可谓十分流畅,既不改变数据,又能对数据进行很好的处理,今天给大家演示下,用Java8的Stream如何对数据进行分组统计,排序,求和等 汇总统计方法 找到汇总统计的方法。这些方法属于java 8的汇总统计类。 getAverage(): 它返回所有接受值的平均值。 getCount():

    2023年04月20日
    浏览(52)
  • 大数据(二)大数据行业相关统计数据

    目录 一、大数据相关的各种资讯 二、转载自网络的大数据统计数据 2.1、国家大数据政策 2.2、产业结构分析 2.3、应用结构分析 2.4、数据中心 2.5、云计算 1.    据IDC预测,到2025年全球 数据产生量将达到180ZB ,其中物联网设备将占据很大一部分。 2.    据Gartner预测,到2021年

    2024年02月10日
    浏览(26)
  • 【pandas基础】--数据统计

    在进行统计分析时, pandas 提供了多种工具来帮助我们理解数据。 pandas 提供了多个聚合函数,其中包括均值、标准差、最大值、最小值等等。 此外, pandas 还可以进行基于列的统计分析,例如通过 groupby() 函数对数据进行聚合,并计算每组的统计分析结果。 除了基本的统计分

    2024年02月08日
    浏览(31)
  • 用Python做数据分析之数据统计

    接下来说说数据统计部分,这里主要介绍数据采样,标准差,协方差和相关系数的使用方法。 1、数据采样 Excel 的数据分析功能中提供了数据抽样的功能,如下图所示。Python 通过 sample 函数完成数据采样。 2、数据抽样 Sample 是进行数据采样的函数,设置 n 的数量就可以了。函

    2024年02月07日
    浏览(37)
  • 【SAS应用统计分析】数据的描述性统计分析

    声明:本文知识参考内容来自网络,如有侵权请联系删除。本文还参照了B站up主庄7的课程内容【公开课】数据分析与SAS【15课】 目录 实验原理 描述性统计量 1.反映数据集中趋势的特征量 2.反映数据离散程度的特征量 3.反映数据分布形状的特征量 数据的图形描述 直方图 箱线

    2024年02月01日
    浏览(35)
  • 无涯教程-机器学习 - 数据统计

    在进行机器学习项目时,通常无涯教程会忽略两个最重要的部分,分别是 数学 和 数据 。这是因为知道ML是一种数据驱动的方法,并且ML模型只会产生与提供给它的数据一样好的或坏的输出。 在上一章中,讨论了如何将CSV数据上传到ML项目中,但是最好在上传之前了解数据。

    2024年02月10日
    浏览(33)
  • 使用Flink完成流数据统计

    所有流计算统计的流程都是: 1、接入数据源 2、进行多次数据转换操作(过滤、拆分、聚合计算等) 3、计算结果的存储 其中数据源可以是多个、数据转换的节点处理完数据可以发送到一个和多个下一个节点继续处理数据 Flink程序构建的基本单元是stream和transformation(DataSet实质

    2024年02月05日
    浏览(34)
  • 大数据-玩转数据-Flink 网站UV统计

    在实际应用中,我们往往会关注,到底有多少不同的用户访问了网站,所以另外一个统计流量的重要指标是网站的独立访客数(Unique Visitor,UV)。 对于UserBehavior数据源来说,我们直接可以根据userId来区分不同的用户。 将userid放到SET集合里面,统计集合长度,便可以统计到网

    2024年02月11日
    浏览(37)
  • 【数据分析】统计量

    1. 均值、众数描述数据的集中趋势度量,四分位差、极差描述数据的离散程度。 2. 标准差、四分位差、异众比率度量离散程度,协方差是度量相关性。  期望值分别为E[X]与E[Y]的两个实随机变量X与Y之间的协方差Cov(X,Y)定义为: 从直观上来看,协方差表示的是两个变量总体误

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包