对一个类中具有相似名称的属性值进行操作

一、问题描述

对于一个类,要依次取得相似的属性名称进行相关操作,如果逐个get(),set()会非常麻烦,例如将属性值逐个求和后放入list。写代码时,首先需要声明一个Integer变量,然后使用+=去赋值,非常麻烦。类似这种重复性代码,考虑使用一个工具类来解决。

之前尝试过使用反射机制去写,import Java.lang.reflect,虽然可以完成需求,但是反射会有性能损耗,因此尝试使用spring框架中的BeanWrapper来写一个工具类。

public static void printIntegerFields(Class<?> clazz) {Field[] fields = clazz.getDeclaredFields(); // 获取类中声明的所有字段for (Field field : fields) {// 判断字段的类型是否为Integerif (field.getType().equals(Integer.class)) {String name = field.getName();if (name.substring(0, 2).equals("gd")) {//处理业务逻辑System.out.println(name);}}}}

二、数据库

三、工具类

使用@Service或者@Component进行注解,spring框架扫描后@Autowired进行依赖注入

public int sumPropertyData(List<? extends CommonEntity> entitys, List<String> dataAxis, List<Integer> dataGd,List<Integer> dataLd) {int total = 0;Map<String, Integer> map = new HashMap<>();for (Object entity : entitys) {// 动态获取getter函数BeanWrapper bw = new BeanWrapperImpl(entity);// 得到所有字段属性名for (PropertyDescriptor propertyDescriptor : bw.getPropertyDescriptors()) {String propertyName = propertyDescriptor.getName();// 以gd开头的属性if (propertyName.substring(0, 2).equals("gd") || propertyName.substring(0, 2).equals("ld")) {Integer value = (Integer) bw.getPropertyValue(propertyName);Integer pre = map.getOrDefault(propertyName, 0);pre += value;map.put(propertyName, pre);total += value;}}}// 从map里将数据传给准备好的list,有人为顺序要求.for (int i = 0; i < dataAxis.size(); i++) {String str = dataAxis.get(i);dataGd.add(map.get("gd" + PropertyEnum.getName(str)));dataLd.add(map.get("ld" + PropertyEnum.getName(str)));}return total;}

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

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

相关文章

《深入Linux内核架构》第3章 内存管理(6)

目录 3.5.7 内核中不连续页的分配 3.5.8 内核映射 本节讲解vmalloc, vmap&#xff0c;kmap原理。 3.5.7 内核中不连续页的分配 kmalloc函数&#xff1a;分配物理地址和虚拟地址都连续的内存。 kmalloc基于slab&#xff0c;而slab基于伙伴系统。 void *vmalloc(unsigned lon…

5.Python数据分析—Pandas数据结构详讲

5.Python数据分析—Pandas数据结构详讲 摘要个人简介简介Series定义和特点创建方法属性和方法 DataFrame定义和特点创建方法数据获取和操作 索引对象种类和应用作用和管理 摘要 Pandas是一个开源的Python数据分析库&#xff0c;提供了高性能、易用的数据结构和数据分析工具。它…

大屏可视化项目示例--基于Vue3+vite2+echart+mock+axios+dataV

图例&#xff1a; 项目环境&#xff1a; Vite、Echarts、Npm、Node、axios、mock、vue3、dataV。 项目地址&#xff1a; IofTV-Screen-Vue3: &#x1f525;(IofTV-Screen Vue3版本)一个基于 vue3、vite、Echart 框架的物联网可视化&#xff08;大屏展示&#xff09;模板&…

php运行python脚本失败怎么解决

假设有文件&#xff1a;php_test.php python_test.py 在php文件中运行Python&#xff1a; exec("python python_test.py", $array, $ret); 如果运行Python出错并不能保存在数组array中&#xff0c;因此应该把标准错误重定向到文件中&#xff0c;以上代码改写如下&a…

YOLOv2

YOLOv2 论文介绍论文改进1. Batch Normalization2. High Resolution Classifier3. Convolutional With Anchor Boxes4. vgg16换成darknet-195. Dimension Clusters&#xff08;w h的聚类&#xff09;6 预测坐标7. passthrough8. 多尺度输入训练 损失函数 论文介绍 论文名字&am…

SSM项目转Springboot项目

SSM项目转Springboot项目 由于几年前写的一个ssm项目想转成springboot项目&#xff0c;所以今天倒腾了一下。 最近有人需要毕业设计转换一下&#xff0c;所以我有时间的话可以有偿帮忙转换&#xff0c;需要的私信我或&#xff0b;v&#xff1a;Arousala_ 首先创建一个新的spr…

波士顿房价预测案例(python scikit-learn)---多元线性回归(多角度实验分析)

波士顿房价预测案例&#xff08;python scikit-learn&#xff09;—多元线性回归(多角度实验分析) 这次实验&#xff0c;我们主要从以下几个方面介绍&#xff1a; 一、相关框架介绍 二、数据集介绍 三、实验结果-优化算法对比实验&#xff0c;数据标准化对比实验&#xff0…

标题:巨控GRM560:医药行业设备管理的预警的革新者

描述&#xff1a;在快速发展的医药行业中&#xff0c;设备的稳定性和安全性至关重要。巨控GRM560模块作为一种前沿的数据采集和故障提醒系统&#xff0c;已经成为该行业内不可或缺的一部分。本文将深入探讨GRM560模块的功能及其在医药行业中的应用。 正文&#xff1a; 在当今…

29.使线程以固定顺序输出结果

借助wait和notify方法控制线程以固定的顺序执行&#xff1a; /*** 控制输出字符的顺序&#xff0c;必须是固定顺序2,1* 采用wait-notify实现* param args*/public static void main(String[] args) {new Thread(() -> {synchronized (lock) {while (!isPrint2) {try {lock.…

【漏洞复现】科立讯指挥调度管理平台存在命令注入漏洞

0x01 产品简介 科立讯指挥调度管理平台是一个专业针对通信行业的管理平台。该产品旨在提供高效的指挥调度喝管理解决方案,以帮助通信运营商或相关机构实现更好的运营效率和服务质量。该平台提供强大的指挥调度功能,可以实时监控和管理通信网络设备、维护人员和工作任务等。用…

C语言:文件操作(一)

目录 前言 1、为什么使用文件 2、什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 3、文件的打开和关闭 3.1 文件指针 3.2 文件的打开和关闭 结&#xff08;一&#xff09; 前言 本篇文章将介绍C语言的文件操作&#xff0c;在后面的内容讲到&#xff1a;为什么使用文…

C++的并发世界(五)——线程状态切换

0.线程状态 初始化&#xff1a;该线程正在被创建&#xff1b; 就绪&#xff1a;该线程在列表中就绪&#xff0c;等待CPU调度&#xff1b; 运行&#xff1a;该线程正在运行&#xff1b; 阻塞&#xff1a;该线程被阻塞挂机&#xff0c;Blocked状态包括&#xff1a;pend&#xff…