【Java 动态数据统计图】动态数据统计思路案例(动态,排序,containsKey)五(117)

news2025/1/17 15:30:47

需求:前端根据后端的返回数据:画统计图;

1.动态获取地域数据以及数据中的平均值,按照平均值降序排序;
说明:
X轴是动态的,有对应区域数据则展示;
X轴 区域数据降序排序;
在这里插入图片描述
代码:


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

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

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

        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> 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 value = String.valueOf(entry.getValue());
            countList.add(value);
        }
        // 计算平均值:封装集合avgList
        if(numberList.size() == countList.size()) {
            for (int i = 0; i < numberList.size(); i++) {
                double fenzi = Double.parseDouble(numberList.get(i));
                int fenmu = Integer.valueOf(countList.get(i));
                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
        for (int i = 0; i < listFinal.size(); i++) {
            listFinal.get(i).put("sortValue",i+1);
        }
        return listFinal;
	}
	

Postman接口测试
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/896365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CloudQuery:更好地管理你的 OceanBase 数据库

前言&#xff1a;作为 OceanBase 的生态合作伙伴&#xff0c;CloudQuery&#xff08;简称“CQ”&#xff09; 最新发布的社区版 2.2.0 新增了 OceanBase 数据库&#xff0c;为企业使用 OceanBase 数据库提供全面的支持。包括连接与认证、查询与分析、数据安全与权限管理&#x…

同伦问题与同伦算法

同伦问题 据我所知&#xff0c;这篇博客是CSDN上少数几篇讲同伦算法的博客之一考虑同伦算法的目的 扩大初值选取范围解决非线性代数方程组的全部解计算问题 同伦算法中的基本概念 考虑求的解人为地引入参数t,构造一个函数族使得 同时假设的解已知&#xff0c;从出发可以求解对…

Matplotlib数据可视化(三)

目录 1.绘图的填充 1.1 曲线下方区域的填充 1.2 填充部分区域 1.3 两条曲线之间的区域填充 1.4 直接使用fill进行填充 1.绘图的填充 绘图的填充可以调用fill_between()或fill()进行填充。 1.1 曲线下方区域的填充 x np.linspace(0,1,500) y np.sin(3*np.pi*x)*np.exp…

Python功能制作之3D方块

介绍 用python写一个黑窗口&#xff0c;窗口里面有一个白色的3D方块&#xff0c;左键按下后移动可以旋转以各个视角来看方块。 当然有需要的话&#xff0c;可以自己在代码中去更改颜色&#xff0c;直接通过RBG的参数进行更改即可。 做了两个函数&#xff1a;init[初始化]和d…

坦克大战-kotlin

坦克大战 游戏需求&#x1f447;核心玩法&#x1f447;&#x1f447;界面原型&#x1f447;&#x1f447;成品演示&#x1f447; 游戏开发1.代码实现 源码下载 专栏简介 &#x1f492;个人主页 &#x1f4f0;专栏目录 点击上方查看更多内容 &#x1f4d6;心灵鸡汤&#x1…

<CodeGeeX>基于大模型的全能AI编程助手

CodeGeex官网 智谱AI官网 CodeGeex是由清华大学 KEG 实验室和智谱 AI 公司于2023共同训练的代码生成模型 CodeGeeX 开发的AI助手。它基于深度学习技术&#xff0c;能够针对用户的问题和要求提供适当的答复和支持。CodeGeex的功能包括代码生成、自动添加注释、代码翻译以及智能问…

Unity制作一个简单的登入注册页面

1.创建Canvas组件 首先我们创建一个Canvas画布&#xff0c;我们再在Canvas画布底下创建一个空物体&#xff0c;取名为Resgister。把空物体的锚点设置为全屏撑开。 2.我们在Resgister空物体底下创建一个Image组件&#xff0c;改名为bg。我们也把它 的锚点设置为全屏撑开状态。接…

看完这篇文章,被这个学习技巧狠狠吸引了!

思政课程的学习不仅仅是课堂知识的传授&#xff0c;更是培养学生全面发展和积极参与社会的能力的过程。学生应该认真学习思政课程&#xff0c;积极思考&#xff0c;结合自己的实际情况&#xff0c;形成独立的思考和判断。 通过思政通学习小程序的多样化知识&#xff0c;学生可以…

剑指Offer37.序列化二叉树 C++

1、题目描述 请实现两个函数&#xff0c;分别用来序列化和反序列化二叉树。你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑&#xff0c;你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结…

利用css动画和定时器setTimeout,实现上传图片进度条

思路 利用css动画和js定时器&#xff08;setTimeout&#xff09;&#xff0c;实现简单的进度条。 优势 不使用 setInterval&#xff0c;减少js代码量&#xff0c;业务代码更加简洁。 示意图 上传中上传成功上传失败 代码 html <!-- img-wrap有两种状态&#xff1a;u…

【O2O领域】Axure外卖订餐骑手端APP原型图,外卖配送原型设计图

作品概况 页面数量&#xff1a;共 110 页 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;外卖配送、生鲜配送 作品申明&#xff1a;页面内容仅用于功能演示&#xff0c;无实际功能 作品特色 本品为外卖订餐骑手端APP原型设计图&#x…

以太网(一):PoE供电

一、定义&#xff1a; PoE系统包括供电端设备&#xff08;PSE&#xff09;和受电端设备&#xff08;PD&#xff09;两部分PoE&#xff08;Power over Ethernet&#xff09;&#xff1a;​是一种可以在以太网中透过双绞线来传输电力与数据到设备上的技术PSE&#xff08;Power S…

ROS局部路径规划器插件teb_local_planner规划流程概括总结

本部分文章主要用于对ROS局部路径规划器插件teb_local_planner的规划流程进行梳理&#xff0c;并概括总结&#xff0c;本部分计划包含5~6篇文章&#xff0c;各文章主要内容如下&#xff1a; ☆第一篇&#xff1a;主要介绍ROS导航包Navigation中的 Movebase节点中的路径规划的相…

1000元到3000元预算的阿里云服务器配置大全

1000元、2000元或3000元预算能够买的阿里云服务器配置有哪些&#xff1f;可以选择ECS通用算力型u1云服务器、ECS计算型c7或通用型g7实例规格&#xff0c;当然&#xff0c;如果选择轻量应用服务器的话&#xff0c;更省钱&#xff0c;阿里云百科分享1000-3000元预算能买的阿里云服…

敏捷项目管理解决方案

Leangoo领歌是一款永久免费的专业敏捷研发管理工具&#xff0c;提供敏捷研发解决方案&#xff0c;解决研发痛点&#xff0c;打造成功产品。帮助团队实现需求、迭代、缺陷、任务、测试、发布等全方位研发管理。 敏捷产品路线图管理&#xff1a; 产品路线图是一个高层次的战略计…

Android 9.0 Vold挂载流程解析(下)

Android 9.0 Vold挂载流程解析&#xff08;上&#xff09; 前言 上一篇介绍了Android 文件系统中Vold挂载机制的总体框架&#xff0c;我们分析了vod进程的main.cpp.接下来我们分析下存储卡挂载和卸载的流程。 存储卡挂载 在上篇文章文章提到&#xff0c;监听驱动层挂载和卸…

SOLIDWORKS 2023中装配体配合的正确使用方法 硕迪科技

-SOLIDWORKS 装配体打开时是由不同的阶段和性能检查组成的。如果在创建装配体时未应用基本的配合方法&#xff0c;问题会随着时间的推移而累积&#xff0c;并且在使用时会出现明显的速度减慢。 如果您的装配体运行速度很慢&#xff0c;则很可能是在创建配合时出现了不良操作的症…

腾讯云 CODING 荣获 TiD 质量竞争力大会 2023 软件研发优秀案例

点击链接了解详情 8 月 13-16 日&#xff0c;由中关村智联软件服务业质量创新联盟主办的第十届 TiD 2023 质量竞争力大会在北京国家会议中心召开。本次大会以“聚焦数字化转型 探索智能软件研发”为主题&#xff0c;聚焦智能化测试工程、数据要素、元宇宙、数字化转型、产融合作…

Python入门--变量

变量是指在程序运行期间可以改变其值的数据类型。在Python中&#xff0c;变量可以指定任何数据类型&#xff0c;如字符串、整数、浮点数等。 要创建一个变量&#xff0c;我们必须先指定变量的名称&#xff0c;然后将其赋值。在Python中&#xff0c;变量名可以是任何有意义的名…

分布式基础

1、分布式简介 1.1、分布式定义 分布式系统是一个硬件或软件组件分布在不同的网络计算机上&#xff0c;彼此之间仅仅通过消息传递进行通信和协调的系统。 1.2、分布式特点 分布性&#xff1a;分布式系统中的多台计算机都会在空间上随意分布&#xff0c;同时&#xff0c;机器…