【Java 动态数据统计图】动态数据统计思路案例(动态,排序,数组)四(116)

news2025/1/19 14:27:21

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

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());
        List<Map<String,Object>> resultList = new ArrayList<>();
        String[] reginArr = {"安徽","安顺","北京","北美","长春","长沙","成都","承德","大连","武汉"};
        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;  // 统计次数
                    processTimeCount[j] = processTimeCount[j] + Double.parseDouble(processTime2);  // 统计合并值
                }
            }
        }
        // 计算平均值
        for (int i = 0; i < processTimeCount.length; i++) {
            processTimeAvg[i] =  processTimeCount[i]/count[i];
            // double类型的数据当分母的数值趋近0的时候,返回来的数值就是一个NAN:
            if(Double.isNaN(processTimeAvg[i])){
                processTimeAvg[i] = 0.0;
            }
        }
        // 将数据封装集合
        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);
        }
        // 数据过滤
        List<Map<String,Object>> finalList = new ArrayList<>();
        // 过滤不需要的数据;
        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()];
        // 用数组存储需要排序的元素;
        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"));
        }
        // 多个数组排序;
        BubblSortUtils.bubbleSortDescMultipleDouble(valueSort,titleSort);
        // 根据排序结果封装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));
                }
            }
        }
        // 添加排序字段:sortValue
        for (int i = 0; i < finalList2.size(); i++) {
            finalList2.get(i).put("sortValue",i+1);
        }
        return finalList2;
    }

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

总结: 代码中有一个地域的数组:reginArr ,如果地域字典新增,还需维护这个字典,所以还是不够灵活;参考【Java 动态数据统计图】动态数据统计思路Demo(动态,排序)三(115)和【Java代码优化】for循环,多if条件分支代码优化一(110)中的优化方案二;有更灵活计算逻辑;

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

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

相关文章

加速出海丨美格智能SLM320模组再获德国电信认证

近日&#xff0c;美格智能Cat.1模组SLM320再获国际顶尖运营商德国电信认证&#xff0c;可以支持客户在德国电信网络所覆盖的德国、荷兰、波兰、奥地利、捷克、斯洛伐克、匈牙利等欧洲多国市场部署物联网应用&#xff0c;是美格智能走向全球市场的又一重要突破。 日前&#xff0…

通达信指标:显示全部的DRAWICON函数图标

**指标使用说明&#xff1a;**指标名称&#xff08;DRAWICON图标&#xff0c;幅图显示&#xff09;&#xff0c;需要查看图标的时候&#xff0c;要选择上市天数>92天的股票&#xff0c;才能正常的显示全部的图标&#xff0c;否则是无法显示的&#xff0c;以下的写法也是指标…

客服如何减轻工作压力?浅析客服压力管理方法

在现代商业领域中&#xff0c;客服是一项非常重要的工作&#xff0c;负责根据客户需求提供解决方案。客服工作不仅需要一定的专业知识和技能&#xff0c;还需要面对各种复杂、多变的情况&#xff0c;并拥有强大的应对压力的能力。客服从业人员的工作压力往往非常大&#xff0c;…

C++初阶语法——内部类

前言&#xff1a;内部类&#xff0c;顾名思义是定义在类中的类&#xff0c;许多人会以为它属于外部的类&#xff0c;实际上并不是&#xff0c;它们是两个独立的类&#xff0c;但是内部类受外部类类域的限制。 目录 一.概念二.特性1.内部类和外部类相互独立2.内部类是外部类的友…

极客时间-茹炳晟《软件测试52讲》-学习笔记-

测试基础知识篇&#xff08;11讲&#xff09; 01 你真的懂测试吗&#xff1f;从“用户登录”测试谈起 测试用例设计框架 基于功能性需求和非功能性需求思考&#xff1a; 功能性需求使用等价类划分、边界值分析、错误推断法设计用例 非功能性需求考虑安全&#xff08;信息的保存…

《Java极简设计模式》第04章:建造者模式(Builder)

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 源码地址&#xff1a;https://github.com/binghe001/java-simple-design-patterns/tree/master/j…

星际争霸之小霸王之小蜜蜂(三)--重构模块

目录 前言 一、为什么要重构模块 二、创建game_functions 三、创建update_screen() 四、修改alien_invasion模块 五、课后思考 总结 前言 前两天我们已经成功创建了窗口&#xff0c;并将小蜜蜂放在窗口的最下方中间位置&#xff0c;本来以为今天将学习控制小蜜蜂&#xff0c;结…

基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入

目录 开启GPIO5对应的时钟 设置引脚复用 设置GPIO5_IO1输入模式 设置检测电平 部分代码 button.c led.c main.c 在原理图上找到对应的引脚后即可以根据对应的图表找到真正在板字上的引脚&#xff0c;这里的 SNVS_TAMPER1对应实际的引脚是GPIO5_IO1 P1357页附近有GPIO5对…

华为OD机试 - 数字字符串组合倒序 - 正则表达式(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、熟读题意&#xff0c;大概理解为&#xff1a;2、我理解 “-”作为连接符使用时作为字符串的一部分 的意思是&#xff1a;3、解决本题的关键是正则表达式的使用。 五、Java算法源码六、效果展示1、输入2、输出…

142页大型制造企业IT蓝图、信息化系统技术架构规划与实施方案PPT

导读&#xff1a;原文《142页大型制造企业IT蓝图、信息化系统技术架构规划与实施方案PPT》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取…

新能源电动车充电桩控制主板的三大保护功能

新能源电动车充电桩控制主板的三大保护功能 你是否曾经遇到过电动车充电时电流过大&#xff0c;电压不稳定&#xff0c;或者电池过热的情况?这些问题都可能会给你的电动车带来安全隐患。那么&#xff0c;如何避免这些问题的发生呢?让我们一起来探讨一下充电桩控制主板的保护功…

这款编程语言,竟然没有程序员使用,却人丁兴旺

人丁兴旺 现在&#xff0c;编程语言种类繁多&#xff0c;比如Java、Python、C等&#xff0c;每种语言都有其特定的应用场景和优势。 然而&#xff0c;让我们感到惊奇的是&#xff0c;有一款编程语言&#xff0c;它并没有广大的程序员使用&#xff0c;却依然能够在编程世界中独…

初阶C语言-结构体

&#x1f31e; “少年有梦不至于心动&#xff0c;更要付诸行动。” 今天我们一起学习一下结构体的相关内容&#xff01; 结构体 &#x1f388;1.结构体的声明1.1结构的基础知识1.2结构的声明1.3结构成员的类型1.4结构体变量的定义和初始化 &#x1f388;2.结构体成员的访问2.1结…

04-微信小程序常用组件-基础组件

04-微信小程序常用组件-基础组件 文章目录 基础内容icon 图标案例代码 text 文本案例代码 progress 进度条案例代码 微信小程序包含了六大组件&#xff1a; 视图容器、 基础内容、 导航、 表单、 互动和 导航。这些组件可以通过WXML和WXSS进行布局和样式设置&#xff0c…

我还不知道?Android组件化插件化模块化

Android组件化、插件化和模块化是针对Android应用程序开发的一种架构设计思想和开发方式。 组件化&#xff08;Componentization&#xff09;&#xff1a; 组件化是将一个大型的Android应用程序拆分成多个独立的组件&#xff08;Module&#xff09;&#xff0c;每个组件可以独…

SUMO 创建带有停车位的充电站 在停车位上充电

前言 SUMO提供的Charging Station是没有停车位的&#xff0c;车辆只有在通过充电站区域或者停在充电站区域内时才能被充电&#xff0c;这时充电的车辆就会占用道路。然而&#xff0c;真实世界中的情况通常是充电站设在路边&#xff0c;且提供一定量的车位用于停车&#xff0c;…

探索OLED透明屏的多领域应用:技术驱动的未来之窗

OLED透明屏作为一项具有突破性技术的新兴产品&#xff0c;正在各个领域展现无限的可能性。 其独特的透明性和高对比度&#xff0c;使其在智能家居、汽车行业、商业展示、航空航天、教育与培训以及医疗健康等领域中得到广泛应用。 那么&#xff0c;尼伽将详细探讨OLED透明屏在…

程序的DAC检查与LSM简介

程序的DAC检查 在Linux中&#xff0c;程序的DAC&#xff08;Discretionary Access Control&#xff0c;自主访问控制&#xff09;检查是指操作系统对程序执行期间对文件和资源的访问权限进行的检查。 Linux使用一种基于权限的访问控制模型&#xff0c;其中每个文件和资源都与…

Linux学习之iptables过滤规则的使用

cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810&#xff0c;uname -r看到内核版本是3.10.0-957.el7.x86_64&#xff0c;iptables --version可以看到iptables版本是v1.4.21。 iptables -t filter -A INPUT -s 10.0.0.8 -j ACCEPT会在最后一行插入。 10…

借用空数组方法:处理类数组的对象的实用技巧

前言 NodeList 不是一个数组&#xff0c;是一个类似数组的对象 (Like Array Object)。虽然 NodeList 不是一个数组&#xff0c;但是可以使用 forEach() 来迭代。你还可以使用 Array.from() 将其转换为数组。 不过&#xff0c;有些浏览器较为过时&#xff0c;没有实现 NodeList.…