【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.mzph.cn/news/46126.shtml

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

相关文章

最新ChatGPT网站AI系统源码+详细图文搭建教程/支持GPT4.0/AI绘画/H5端/Prompt知识库/

一、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01…

从 Ansible Galaxy 使用角色

从 Ansible Galaxy 使用角色 根据下列要求&#xff0c;创建一个名为 /home/curtis/ansible/roles.yml 的 playbook &#xff1a; playbook 中包含一个 play&#xff0c; 该 play 在 balancers 主机组中的主机上运行并将使用 balancer 角色。 此角色配置一项服务&#xff0c;以…

Docker容器:docker镜像的创建及dockerfile

Docker容器&#xff1a;docker镜像的创建及dockerfile案例 一.docker镜像的三种创建方法 创建镜像有三种方法&#xff1a;基于现有镜像创建、基于本地模板创建及基于dockerfile创建 1.基于现有镜像创建 1.1 启动镜像 #首先启动一个镜像&#xff0c;在容器里做修改 docker …

SpringBoot常用注解-@PathVariable、@RequestParam 、@RequestBody

目录 PathVariable RequestParam RequestBody PathVariable PathVariable 获取url中的数据&#xff0c;绑定路径中的占位符参数到方法参数变量中&#xff0c;get或者post方式都可以&#xff0c;如果URL中无参数&#xff0c;将会出错 例如获取/login/id/name中的id值和name值 …

途乐证券|定增募资是什么意思?

作为融资手法之一&#xff0c;定增募资在企业中被广泛运用。但一般投资者对此或许不太了解&#xff0c;只知道它是一种融资手法。那么&#xff0c;定增募资到底是什么意思呢&#xff1f; 一、什么是定增募资&#xff1f; 定增募资即定向增发股票募集资金&#xff0c;是新股票发…

C++入门知识点——解决C语言不足

&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️ &#x1f4a5;个人主页&#xff1a;&#x1f525;&#x1f525;&#x1f525;大魔王&#x1f525;&#x1f525;&#x1f525; &#x1f4a5;代码仓库&#xff1a;&#x1f525;&#x1f525;魔…

【C# 基础精讲】LINQ to Objects查询

LINQ to Objects是LINQ技术在C#中的一种应用&#xff0c;它专门用于对内存中的对象集合进行查询和操作。通过使用LINQ to Objects&#xff0c;您可以使用统一的语法来查询、过滤、排序、分组等操作各种.NET对象。本文将详细介绍LINQ to Objects的基本概念、常见的操作和示例&am…

Android Studio实现读取本地相册文件并展示

目录 原文链接效果 代码activity_main.xmlMainActivity 原文链接 效果 代码 activity_main.xml 需要有一个按钮和image来展示图片 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk…

Error creating bean with name ‘esUtils‘ defined in file

报错异常&#xff1a; 背景&#xff1a; esUtils在common服务中、启动media服务时候、报这个异常、后排查esUtils在启动时候发生异常引起的、在相关bean中加入try{}catch{}即可解决问题 String[] split url.split(","); HttpHost[] httpHosts new HttpHost[split.…

FirmAE 工具安装(解决克隆失败 网络问题解决)

FirmAE官方推荐使用Ubuntu 18.04系统进行安装部署&#xff0c;FirmAE工具的安装部署十分简单&#xff0c;只需要拉取工具仓库后执行安装脚本即可。 首先运行git clone --recursive https://kgithub.com/pr0v3rbs/FirmAE命令 拉取FirmAE工具仓库&#xff0c;因为网络的问题&…

c语言每日一练(10)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;暑假时三天之内必有一更&#xff0c;到了开学之后&#xff0c;将看学业情…

验证评估守护关基安全 赛宁数字孪生靶场创新实践

​​近日&#xff0c;由赛宁网安主办&#xff0c;ISC互联网安全大会组委会协办的第十一届互联网安全大会&#xff08;ISC 2023&#xff09;安全运营实践论坛圆满结束。赛宁网安产品总监史崯出席并作出主题演讲&#xff1a;《基于数字孪生靶场如何开展验证评估》&#xff0c;同时…

Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile)

gdb、make/Makefile 引言调试器gdb介绍常用指令 自动化构建工具make/Makefile介绍使用依赖关系与依赖方法编辑Makefile伪目标 总结 引言 在上一篇文章中介绍了Linux中的编辑器vim与编译器gcc与g&#xff1a; 戳我看vim与gcc详解哦 在本篇文章中将继续来介绍Linux中的工具&…

【Apollo学习笔记】——规划模块TASK之LANE_CHANGE_DECIDER

文章目录 前言LANE_CHANGE_DECIDER功能简介LANE_CHANGE_DECIDER相关配置LANE_CHANGE_DECIDER总体流程LANE_CHANGE_DECIDER相关子函数PrioritizeChangeLaneUpdateStatusIsClearToChangeLaneHysteresisFilter 参考 前言 在Apollo星火计划学习笔记——Apollo路径规划算法原理与实…

TCP定制协议,序列化和反序列化

目录 前言 1.理解协议 2.网络版本计算器 2.1设计思路 2.2接口设计 2.3代码实现&#xff1a; 2.4编译测试 总结 前言 在之前的文章中&#xff0c;我们说TCP是面向字节流的&#xff0c;但是可能对于面向字节流这个概念&#xff0c;其实并不理解的&#xff0c;今天我们要介…

nginx反向代理后实现nginx和apache两种web服务器能够记录客户端的真实IP地址

一.构建环境 二.配置反向代理 1.基于源码安装的nginx环境下修改nginx.conf&#xff08;设备1&#xff09; 2.通过windows powershell进行修改hosts文件并测试 3.设备2和设备3上查看日志&#xff0c;可以看到访问来源都是代理服务器&#xff08;2.190&#xff09;而不是真实…

WebSocket服务端数据推送及心跳机制(Spring Boot + VUE)

一、WebSocket简介 HTML5规范在传统的web交互基础上为我们带来了众多的新特性&#xff0c;随着web技术被广泛用于web APP的开发&#xff0c;这些新特性得以推广和使用&#xff0c;而websocket作为一种新的web通信技术具有巨大意义。WebSocket是HTML5新增的协议&#xff0c;它的…

Python Web开发 Django 简介

今天来为大家介绍 Python 另一个 Web 开发框架 Django&#xff0c;它是一个基于 Python 定制的开源 Web 应用框架&#xff0c;最早源于一个在线新闻 Web 网站&#xff0c;后于2005年开源。Django 的功能大而全&#xff0c;它提供的一站式解决的思路&#xff0c;能让开发者不用在…

支持https访问

文章目录 1. 打开自己的云服务器的 80 和 443 端口2. 安装 nginx3. 安装 snapd4. 安装 certbot5. 生成证书6. 拷贝生成的证书到项目工作目录7. 修改 main.go 程序如下8. 编译程序9. 启动程序10. 使用 https 和端口 8081 访问页面成功11. 下面修改程序&#xff0c;支持 https 和…

C++中function,bind,lambda

c11之前&#xff0c;STL中提供了bind1st以及bind2nd绑定器 首先来看一下他们如何使用&#xff1a; 如果我们要对vector中的元素排序&#xff0c;首先会想到sort&#xff0c;比如&#xff1a; void output(const vector<int> &vec) {for (auto v : vec) {cout <&l…