【Java 动态数据统计图】动态数据统计思路案例(动态,排序)二(113)

需求:

  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.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  @Overridepublic 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接口测试:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

容器和云原生(二):Docker容器化技术

目录 Docker容器的使用 Docker容器关键技术 Namespace Cgroups UnionFS Docker容器的使用 首先直观地了解docker如何安装使用&#xff0c;并快速启动mysql服务的&#xff0c;启动时候绑定主机上的3306端口&#xff0c;查找mysql容器的ip&#xff0c;使用mysql -h contain…

shell和Python 两种方法分别画 iostat的监控图

在服务器存储的测试中,经常需要看performance的性能曲线&#xff0c;这样最能直接观察HDD或者SSD的性能曲线。 如下这是一个针对HDD跑Fio读写的iostat监控log,下面介绍一下分别用shell 和Python3 写画iostat图的方法 1 shell脚本 环境:linux OS gnuplot工具 第一步 :解析iosta…

设计模式——适配器模式

引入实例 说起适配器其实在我们的生活中是非常常见的&#xff0c;比如&#xff1a;学校的宿舍的电压都比较低&#xff0c;而有的学生想使用大功率电器&#xff0c;宿舍的就会跳闸&#xff0c;然而如果你使用一个适配器&#xff08;变压器&#xff09;就可以使用了&#xff08;…

微服务最佳实践,零改造实现 Spring Cloud Apache Dubbo 互通

作者&#xff1a;孙彩荣 很遗憾&#xff0c;这不是一篇关于中间件理论或原理讲解的文章&#xff0c;没有高深晦涩的工作原理分析&#xff0c;文后也没有令人惊叹的工程数字统计。本文以实际项目和代码为示例&#xff0c;一步一步演示如何以最低成本实现 Apache Dubbo 体系与 S…

基于Servlet实现的管理系统(包含服务器源码+数据库)

资料下载链接 介绍 基于Servlet框架的管理系统 简洁版 &#xff1b; 实现 登录 、 注册 、 增 、 删 、 改 、 查 &#xff1b; 可继续完善增加前端、校验、其他功能等&#xff1b; 可作为 Servlet项目 开发练习基础模型&#xff1b; 课程设计 、 毕业设计 开发基础&…

Git 删除 GitHub仓库的文件

新建文件夹 git bash here 在新建的文件夹里右键git bash here打开终端&#xff0c;并执行git init初始化仓库 git clone <你的地址> 找到github上要删除的仓库地址&#xff0c;并复制&#xff0c;在终端里输入git clone <你的地址> 要删除文件的库里右键git b…

Fine tune简介

目录 Intro Related work Example .1 重新训练 .2 使用新的数据集进行fine tune .3 修改net结构 References 移学习不是一种算法而是一种机器学习思想,应用到深度学习就是微调(Fine-tune)。通过修改预训练网络模型结构(如修改样本类别输出个数),选择性载入预训练网络…

【云原生,k8s】基于Helm管理Kubernetes应用

第四阶段 时 间&#xff1a;2023年8月18日 参加人&#xff1a;全班人员 内 容&#xff1a; 基于Helm管理Kubernetes应用 目录 一、Kubernetes部署方式 &#xff08;一&#xff09;minikube &#xff08;二&#xff09;二进制包 &#xff08;三&#xff09;Kubeadm …

【JUC】线程池ThreadPoolTaskExecutor与面试题解读

1、ThreadPoolTaskExecutor 创建线程池 从它的创建和使用说起&#xff0c;创建和使用的代码如下&#xff1a; 创建&#xff1a; ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setCorePoolSize(corePoolSize);executor.setMaxPoolSize(maxPoolSize…

爬虫逆向实战(十五)--阿某某营登录

一、数据接口分析 主页地址&#xff1a;阿某某营 1、抓包 通过抓包可以发现登录接口是Users/Login 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现有一个s加密参数 请求头是否加密&#xff1f; 无响应是否加密&#xff1f; 无cookie是…

【果树农药喷洒机器人】Part7:静态PWM变量喷药实验

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-CNN-BiGRU-Attention多特征分类预测&#xff0c;多特征输入模型&…

C++——移动构造和完美转发

1.什么是右值 右值引用是C11的概念&#xff0c;与之对应的是左值引用。 当一个对象被用作右值的时候&#xff0c;用的是对象的值(内容)&#xff1b;当对象被用作左值的时候&#xff0c;用的是对象的身份(在内存当中的位置)。 以上的概念是摘录自《C primer》。 但是这样的概…

hdu8-Congruences(中国剩余定理)

Problem - 7363 (hdu.edu.cn) 参考&#xff1a;2023杭电暑假多校8 题解 3 5 7 10 | JorbanS_JorbanS的博客-CSDN博客 题解&#xff1a;&#xff08;中国剩余定理 增量法&#xff09; 注意验证和特判&#xff0c;此题中 pi 两两互质&#xff0c;可用CRT和增量法&#xff0c;当…

Linux 进程替换

一、进程替换 把一个进程替换为另外一个进程。对于进程&#xff0c;如果单纯只看复制或者单纯只看替换&#xff0c;没有太大的意义。将复制和替换结合在一起&#xff08;forkexec&#xff09;&#xff0c;就是系统去产生一个全新进程的一种方式。 将复制和替换结合在一起&…

MySQL—缓存

目录标题 为什么要有Buffer Poolbuffer pool有多大buffer pool缓存什么 如何管理Buffer Pool如何管理空闲页如何管理脏页如何提高缓存命中率预读失效buffer pool污染 脏页什么时候会被刷入到磁盘 为什么要有Buffer Pool 虽然说MySQL的数据是存储在磁盘中&#xff0c;但是也不能…

爬虫IP时效问题:优化爬虫IP使用效果实用技巧

目录 1. 使用稳定的代理IP服务提供商&#xff1a; 2. 定期检测代理IP的可用性&#xff1a; 3. 配置合理的代理IP切换策略&#xff1a; 4. 使用代理IP池&#xff1a; 5. 考虑代理IP的地理位置和速度&#xff1a; 6. 设置合理的请求间隔和并发量&#xff1a; 总结 在爬虫过…

【JAVA】数组练习

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 数组练习 1. 数组转字符串2. 数组拷贝3.…

Layui列表复选框根据条件禁用

// 禁用客服回访id有值的复选框res.data.forEach(function (item, i) {if (item.feedbackEmpId) {let index res.data[i][LAY_TABLE_INDEX];$(".layui-table tr[data-index"index"] input[typecheckbox]").prop(disabled,true);$(".layui-table tr[d…

c++--SLT六大组件之间的关系

1.SLT六大组件&#xff1a; 容器&#xff0c;迭代器&#xff0c;算法&#xff0c;仿函数&#xff0c;适配器&#xff0c;空间配置器 2.六大组件之间的关系 容器&#xff1a;容器是STL最基础的组件&#xff0c;没有容器&#xff0c;就没有数据&#xff0c;容器的作用就是用来存…