当前位置: 首页 > news >正文

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

需求:

  1. 有一个List<Map<String.Object>>,存储了某年某月的数据,
    数据是根据用户查询条件进行显示的;所以查询的数据是动态的;
  2. 需按月份统计每个年月数据出现的次数,并且按照月份排序;
  3. 统计周期不超过一年(前端页面控制);

分析:
后端给前端返回值:不能用对象返回,因为数据是动态的,key是不固定的;
可以使用:List<Map<String,Object>>返回;Map中key为年月;value为统计次数;

Demo案例:


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class day06 {public static void main(String[] args) {List<Map<String,Object>> list = new ArrayList<>();Map<String,Object> map1 = new HashMap<>();map1.put("month","2023年02月");Map<String,Object> map2 = new HashMap<>();map2.put("month","2023年05月");Map<String,Object> map3 = new HashMap<>();map3.put("month","2023年04月");Map<String,Object> map4 = new HashMap<>();map4.put("month","2023年02月");Map<String,Object> map5 = new HashMap<>();map5.put("month","2023年01月");list.add(map1);list.add(map2);list.add(map3);list.add(map4);list.add(map5);String[] auditMonthArr = {"01","02","03","04","05","06","07","08","09","10","11","12"};int[] count = new int[auditMonthArr.length];String[] yearArr = new String[auditMonthArr.length];for (int i = 0; i < list.size(); i++) {String auditMonth = String.valueOf(list.get(i).get("month")).trim();String auditMonth2 = auditMonth.substring(auditMonth.indexOf("年")+1,auditMonth.indexOf("月"));for (int j = 0; j < auditMonthArr.length; j++) {if(auditMonth2.equals(auditMonthArr[j].trim())){count[j] = count[j] + 1;yearArr[j] = auditMonth;}}}List<Map<String,Object>> listResult = new ArrayList<>();// 按照1月到12月动态展示数据;for (int i = 0; i < auditMonthArr.length; i++) {Map<String,Object> map = new HashMap<>();String title = yearArr[i];int value = count[i];if(!String.valueOf(value).equals("0")){map.put("title",title);map.put("value",value);listResult.add(map);}}	for (int i = 0; i < listResult.size(); i++) {listResult.get(i).put("sortValue",i+1);}System.out.println("listResult:"+listResult);}
}

测试输出:

listResult:
listResult:[{sortValue=1, title=202301, value=1}, {sortValue=2, title=202302, value=2}, {sortValue=3, title=202304, value=1}, {sortValue=4, title=202305, value=1}]

案例二:
需求:前端根据后端的返回数据:画趋势图;

  1. X轴是动态的,有对应月份数据则展示;
  2. X轴 按照1-12月排序(没月份则跳过);
    在这里插入图片描述
// Controllerpublic Result getTrendData(HttpServletRequest request,@RequestBody String param) {try {Map<String, Object> paramMap = JsonUtils.readValue(param, Map.class);return Result.success().result(questionListService.getTrendData(request,paramMap));} catch (Exception e) {log.error("QuestionListController getTrendData is error===:" + e.getMessage(), e);return Result.failure("统计失败");}}// Service    List<Map<String,Object>> getTrendData(HttpServletRequest request,Map<String, Object> paramMap);// ServiceImpl  @Overridepublic List<Map<String,Object>> getTrendData(HttpServletRequest request, Map<String, Object> paramMap) {List<Map<String,Object>> list = getCountData(request,paramMap); // 封装统计查询的数据(与数据库交互)List<Map<String,Object>> listResult = new ArrayList<>();String[] auditMonthArr = {"01","02","03","04","05","06","07","08","09","10","11","12"};int[] monDataArr = new int[auditMonthArr.length];String[] yearArr = new String[auditMonthArr.length];for (int i = 0; i < list.size(); i++) {String auditMonth = String.valueOf(list.get(i).get("auditMonth"));String mon = auditMonth.substring(auditMonth.indexOf("年")+1,auditMonth.lastIndexOf("月"));for (int j = 0; j < auditMonthArr.length; j++) {if(mon.equals(auditMonthArr[j])){monDataArr[j] = monDataArr[j] + 1;yearArr[j] = auditMonth;}}}// 按照1月到12月动态展示数据;for (int i = 0; i < auditMonthArr.length; i++) {Map<String,Object> map = new HashMap<>();String title = yearArr[i];int value = monDataArr[i];// 该判断很重要(仔细品)if(!String.valueOf(value).equals("0")){map.put("title",title);map.put("value",value);listResult.add(map);}}return listResult;}

Postman接口测试:

在这里插入图片描述

相关文章:

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

需求&#xff1a;&#xff1a; 有一个List<Map<String.Object>>,存储了某年某月的数据&#xff0c; 数据是根据用户查询条件进行显示的&#xff1b;所以查询的数据是动态的&#xff1b;需按月份统计每个年月数据出现的次数&#xff0c;并且按照月份排序&#xff1…...

kafka踩坑

问题&#xff1a;项目中用到kafka作为消息中间件&#xff0c;因为现在是开发阶段&#xff0c;试了一次没问题之后就没在管&#xff0c;今天又要测试kafka相关功能&#xff0c;发现消息发送者能够正常发送消息&#xff0c;但是消费者怎么也就收不到数据。然后经过各种百度进行了…...

让你专注于工作的电脑桌面日程提醒软件

在现代职场中&#xff0c;上班族们常常在繁忙的工作中会遇到各种各样的事情干扰。比如&#xff0c;当我们专注于完成重要的报告时&#xff0c;却又有同事来询问问题&#xff1b;在准备去会议事项时&#xff0c;手机却突然收到了一系列的短信和通知。这些干扰不仅浪费了我们的时…...

62页智慧产业园区数字化综合解决方案PPT

导读&#xff1a;原文《62页智慧产业园区数字化综合解决方案PPT》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 喜欢文章&#xff0c;您可以关注评论转发本文&#…...

苹果开发者账号注册方法简明指南

注册苹果开发者账号的方法 在2020年以前&#xff0c;注册苹果开发者账号后&#xff0c;就可以生成证书。 但2020年后&#xff0c;因为注册苹果开发者账号需要使用Apple Developer app注册开发者账号&#xff0c;所以需要缴费才能创建ios证书了。 所以新政策出来后&#xff0c;…...

SQL-每日一题【1321. 餐馆营业额变化增长】

题目 表: Customer 你是餐馆的老板&#xff0c;现在你想分析一下可能的营业额变化增长&#xff08;每天至少有一位顾客&#xff09;。 计算以 7 天&#xff08;某日期 该日期前的 6 天&#xff09;为一个时间段的顾客消费平均值。average_amount 要 保留两位小数。 结果按 …...

PyCharm PyQt5 开发环境搭建

环境 python&#xff1a;3.6.x PyCharm&#xff1a;PyCharm 2019.3.5 (Community Edition) 安装PyQT5 pip install PyQt5 -i https://pypi.douban.com/simplepip install PyQt5-tools -i https://pypi.douban.com/simple配置PyCharm PyQtUIC Program &#xff1a;D:\Pytho…...

2023-08-17 Untiy进阶 C#知识补充8——C#中的日期与时间

文章目录 一、名词概念二、DateTime三、TimeSpan 一、名词概念 &#xff08;一&#xff09;格里高利历 ​ 格里高利历一般指公元&#xff0c;即公历纪年法。目前我们所说公历&#xff0c;就是格里高利历。 ​ 比如 2022 年就是从公元元年开始算起的两千二十二年。 &#xf…...

SPSS--如何使用分层分析以及分层分析案例分享

分层分析&#xff1a;将资料按某个或某些需要控制的变量的不同分类进行分层&#xff0c;然后再估计暴露因子与某结局变量之间关系的一种资料分析方法。 分层分析的最重要的用途是评估和控制混杂因子所致的混杂偏倚。通过按混杂因子分层&#xff0c;可使每层内的两个比较组在所控…...

时序数据库influxdb笔记

官方资料 https://docs.influxdata.com/influxdb/v2.7/install/?tLinux https://www.influxdata.com/influxdb/ 安装 1、linux平台下 1&#xff09;下载 2&#xff09;解压 3&#xff09;添加账户&#xff08; adduser influx&#xff09; 4&#xff09;设置目录权限 5…...

8月18日上课内容 Haproxy搭建Web群集

本章结构 课程大纲 Haproxy调度算法 常见的web集群调度器 目前常见的Web集群调度器分为软件和硬件软件 通常使用开源的LVS、Haproxy、Nginx 硬件一般使用比较多的是F5&#xff0c;也有很多人使用国内的一些产品&#xff0c;如梭子鱼、绿盟等 Haproxy应用分析 LVS在企业应用中…...

【高阶数据结构】红黑树详解

文章目录 前言1. 红黑树的概念及性质1.1 红黑树的概念1.2 红黑树的性质1.3 已经学了AVL树&#xff0c;为啥还要学红黑树 2. 红黑树结构的定义3. 插入&#xff08;仅仅是插入过程&#xff09;4. 插入结点之后根据情况进行相应调整4.1 cur为红&#xff0c;p为红&#xff0c;g为黑…...

树莓牌4B安装Centos8

准备工作 镜像&#xff1a;https://people.centos.org/pgreco/CentOS-Userland-8-stream-aarch64-RaspberryPI-Minimal-4/ 烧制工具&#xff1a;https://www.raspberrypi.com/software/ 初始化 将上述工具烧制好的SD卡插入树莓派&#xff0c;通电。通过网线将树莓派与电脑连…...

SQL Monitor Crack,PostgreSQL监控的传入复制图表

SQL Monitor Crack,PostgreSQL监控的传入复制图表  现在&#xff0c;您可以在从Estate页面导出的Microsoft Excel报告的摘要标题中看到UTC偏移量。 添加了PostgreSQL监控的传入复制图表。 Microsoft PowerShell API现在支持将使用New-SqlMonitorWindowsHost和New-SqlMonitorin…...

软件测试技术之单元测试—工程师 Style 的测试方法(3)

如何设计单元测试&#xff1f; 单元测试设计方法 单元测试用例&#xff0c;和普通测试用例的设计&#xff0c;没有太多不同&#xff0c;常见的就是等价类划分、边界值分析等。而测试用例的设计其实也是开发者应该掌握的基本技能。 等价类划分 把所有输入划分为若干分类&…...

Ubuntu中安装OpenSSL

文章目录 一、前期准备1.1 压缩包下载1.2 gcc, make等的安装二、安装配置 一、前期准备 1.1 压缩包下载 在安装openssl之前&#xff0c;我们需要下载对应的压缩包 https://www.openssl.org/source/openssl-3.0.1.tar.gz 此压缩包可以选择win上下载后解压再复制到本地虚拟机中…...

CW4-6A-S、CW4-10A-S、CW4-20A-S、CW4-30A-S螺栓式滤波器

CW3L2-3A-S、CW3L2-6A-S、CW3L2-10A-S、CW3L2-20A-S CW3-3A-S、CW3-6A-S、CW3-10A-S、CW3-20A-S、CW3-30A-S CW4EL2-3A-S、CW4EL2-6A-S、CW4EL2-10A-SCW4EL2-20A-S、CW4EL2-30A-S CW4E-3A-S、CW4E-6A-S、CW4E-10A-S、CW4E-20A-S、CW4E-30A-S CW4E-40A-S(001)、CW4E-50A-S(0…...

课程项目设计--项目设计--宿舍管理系统--vue+springboot完成项目--项目从零开始

写在前面&#xff1a; 本文是从项目设计到完成开始写的&#xff0c;本来这个项目基础功能是做完了的&#xff0c;但是之前时间紧张想从头做起了。之前一周写前端后端累死了. 设计是关键&#xff0c;这一篇主讲设计。可能后面会有修改&#xff0c;本人实力有限,学习的也是别人的…...

【Linux】Linux下常用搜索命令及其常用选项小结

0x00 前言 版本信息&#xff1a;Ubuntu 18.04.6 LTS 最后更新日期&#xff1a;2023.8.18 0x01 Linux下常用搜索命令及其常用选项小结 1.find &#xff08;1&#xff09;find path -name filename &#xff1a;在指定目录path查找名为filename 文件&#xff0c;文件名可用*匹…...

web APIs-练习五

5秒自动关闭的广告&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"…...

MySQL——基础——外连接

一、外连接查询语法&#xff1a;(实际开发中,左外连接的使用频率要高于右外连接) 左外连接 SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...; 相当于查询表1(左表)的所有数据 包含 表1和表2交集部分的数据 右外连接 SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN …...

spring boot 实现Redisson分布式锁及其读写锁

分布式锁&#xff0c;就是控制分布式系统中不同进程共同访问同一共享资源的一种锁的实现。 1、引入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.15.5</versio…...

java-IONIO

一、JAVA IO 1.1. 阻塞 IO 模型 最传统的一种 IO 模型&#xff0c;即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后&#xff0c;内 核会去查看数据是否就绪&#xff0c;如果没有就绪就会等待数据就绪&#xff0c;而用户线程就会处于阻塞状态&#xff0c;用户线…...

Python学习笔记_基础篇(十一)_socket编程

python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心&#xff0c;它承担计算机的所有任务。 操作系统是运行在硬件之上的软件&#xff0c;是计算机的管理者&#xff0c;它负责资源的管理和分配、任务的调度。 程序是运行…...

C#8.0本质论第三章--更多数据类型

C#8.0本质论第三章–更多数据类型 3.1类型的划分 一个类型要么是值类型&#xff0c;要么是引用类型。区别在于拷贝方式&#xff1a;值类型数据总是拷贝值&#xff1b;引用类型的数据总是拷贝引用。 3.1.1值类型 3.1.2引用类型 引用类型的变量存储对数据存储位置的引用。 3.…...

浅拷贝与深拷贝

作者简介&#xff1a; zoro-1&#xff0c;目前大一&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 浅拷贝与深拷贝 浅拷贝浅拷贝定义浅拷贝代码演示浅…...

背包 问题

1、背包问题 1.1、01背包 题目&#xff1a; 有n件物品和一个容量为m的背包&#xff0c;第i件物品的体积是v[ i ]&#xff0c;价值是w[ i ]&#xff0c;每件物品只有一件&#xff0c;求在不超过背包容量的前提下&#xff0c;可以放的物品的最大价值是多少 基本思路&#xff…...

蓝牙资讯|安卓将加强耳机音量监控,耳机查找功能将更加普遍

为了保护用户的听力健康&#xff0c;Android 14 将增加一项新功能&#xff0c;当用户使用耳机听音乐时&#xff0c;如果音量过高或持续时间过长&#xff0c;系统会发出警告&#xff0c;并自动降低音量。这个功能叫做“耳机音量过高警告&#xff08;headphone loud sound alert&…...

vue,element。监听快捷键粘贴图片,添加到el-upload的列表。

在①中&#xff0c;粘贴图片&#xff0c;图片能够自动添加到底下el-upload组件的文件列表②。 // 对应① <el-card><el-tooltip content"粘贴图片至此" placement"top"><input readonly class"pasteImg" paste.prevent"hand…...

时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍…...