计算bean的和(java)
bean中的属性过多时,要计算一个bean的list之和是一件非常麻烦的事情,可以用java的反射机制解决这件事情,代码如下:
package com.jzzhcs.utils; import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List; /**
* 系统通用工具类
*
* @author Jeffy
*
*/
public class Util { /**
* 遍历bean的属性
*
* @author Jeffy
* @param e
* bean对象
* @throws Exception
*/
public static void reflect(Object e) throws Exception {
Class<? extends Object> cls = e.getClass();
Field[] fields = cls.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field f = fields[i];
f.setAccessible(true);
System.out.println("属性名:" + f.getName() + " 属性值:" + f.get(e));
}
} /**
* 计算bean的和
* 利用java反射原理获取传入的object的属性值以及getset方法
* @author Jeffy
* @param e
* bean对象
* @throws Exception
*/
public static Object getSumOfBean(List<?> list) throws Exception {
Class<? extends Object> cls = list.get(0).getClass();
Object resultBean = cls.newInstance();
for (Object o : list) {
Field[] fields = cls.getDeclaredFields();
for (int i = 0; i < fields.length; i++) { Field f = fields[i];
//因为写成private 所以这里必须设置
f.setAccessible(true);
//定义属性名和属性值
String fieldName = f.getName();
Object fieldValue = f.get(o);
//定义构造get、set方法所使用的变量名
String name = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
//定义get、set方法
Method getMethod = resultBean.getClass().getMethod("get" + name);
//调用get方法
Object value = getMethod.invoke(resultBean); // 获取属性的类型
String type = f.getGenericType().toString();
// 如果type是类类型,则前面包含"class ",后面跟类名
if (type.equals("class java.lang.String")) {
}
if (type.equals("class java.lang.Double")) {
if (fieldValue != null) {
// System.out.println("属性名为:" + name);
// System.out.println("属性值为:" + value);
Method setMethod = resultBean.getClass().getMethod("set" + name,Double.class);
if((Double)value != null){
setMethod.invoke(resultBean, (Double)value + (Double)fieldValue);
} else {
setMethod.invoke(resultBean, (Double)fieldValue);
}
// System.out.println(getMethod.invoke(resultBean));
} else {
System.out.println("属性值为:空");
}
}
}
}
return resultBean;
} public static void main(String[] args) throws Exception {
Entity e = new Entity();
List<Entity> list = new ArrayList<Entity>();
e.setD1(1.0);
e.setD2(3.0);
e.setD3(7.0);
list.add(e);
e = new Entity();
e.setD1(13.0);
e.setD2(17.0);
e.setD3(23.0);
list.add(e);
Object o = getSumOfBean(list);
return ;
} }
getSumOfBean方法是主要逻辑,遍历list中的所有bean,将bean的Double类型的属性求和,通过反射调用结果bean的set方法,将属性值存入结果bean。
下面是bean的定义:
package com.jzzhcs.utils; public class Entity {
private String s1 = "字符串1"; private Double d1; private Double d2; private Double d3; public String getS1() {
return s1;
} public void setS1(String s1) {
this.s1 = s1;
} public Double getD1() {
return d1;
} public void setD1(Double d1) {
this.d1 = d1;
} public Double getD2() {
return d2;
} public void setD2(Double d2) {
this.d2 = d2;
} public Double getD3() {
return d3;
} public void setD3(Double d3) {
this.d3 = d3;
} }
计算bean的和(java)的更多相关文章
- Spring mvc 报错:No qualifying bean of type [java.lang.String] found for dependency:
具体错误: No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean w ...
- 7 -- Spring的基本用法 -- 8... 抽象Bean与子Bean;Bean继承与Java继承的区别;容器中的工厂Bean;获得Bean本身的id;强制初始化Bean
7.8 深入理解容器中的Bean 7.8.1 抽象Bean与子Bean 把多个<bean.../>配置中相同的信息提取出来,集中成配置模版------这个配置模版并不是真正的Bean,因此 ...
- 使用mybatis报错constructor found in com.atguigu.mybatis.bean.Department matching [java.lang.Integer, java.lang.String]
报错constructor found in com.atguigu.mybatis.bean.Department matching [java.lang.Integer, java.lang.St ...
- 构建一个学生Student,根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。
定义一个表示学生信息的类Student,要求如下: (1)类Student的成员变量: sNO 表示学号: sName表示姓名: sSex表示性别: sAge表示年龄: sJava:表示Java课程成 ...
- 计算一维组合数的java实现
背景很简单,就是从给定的m个不同的元素中选出n个,输出所有的组合情况! 例如:从1到m的自然数中,选择n(n<=m)个数,有多少种选择的组合,将其输出! 本方案的代码实现逻辑是比较成熟的方案: ...
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
Java提供了Class类,可以通过编程方式获取类别的字段和方法,包括构造方法 获取Class类实例的方法: 类名.class 实例名.getClass() Class.forNam ...
- 基于OpenStreetMap计算驾车距离(Java)
最近公司有个项目需要计算6000个点之间的驾车距离,第一时间想到的是利用Google的Distance Matrix API,但是免费Key每天只能计算2500个元素(元素 = 起点数量 * 终点数量 ...
- Spring装配bean(在java中进行显式配置)
1.简单介绍 Spring提供了三种装配机制: 1.在XML中进行显式配置: 2.在java中进行显式配置: 3.隐式的bean发现机制和自动装配. 其中,1和3项在项目中经常使用,而在java中进行 ...
- 算法笔记_044:表达式计算求值(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的 ...
随机推荐
- 黑马程序员——C语言基础 指针
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)指针 首先指针是C语言中非常重要的数据类型,如果你说C语言中除了指针 ...
- javafx之HTTP协议交互
javafx端要获取获取如下信息: 服务器端获取的数据: javafx客户端发送的数据以及获取的数据: 工程目录: package Httputil; import IPsite.IPaddress; ...
- Android APP使用NDK编译后的ffmpeg库出现undefined reference to 'posix_memalign'错误
在android程序中使用NDK编译后的ffmpeg库的时候出现了如下错误: jni/libs/libavutil.a(mem.o): in function av_malloc:libavutil/ ...
- Data Binding和INotifyPropertyChanged是如何协调工作的?
前言 WPF的一大基础就是Data Binding.在基于MVVM架构的基础上,只有通过实现INotifyPropertyChanged接口的ViewModel才能够用于Data Binding. 要 ...
- 2014优秀的好用的20款免费jQuery插件推荐
2013 年最好的 20 款免费 jQuery 插件,世界买家网 www.buyerinfo.biz在这里分享给大家 这些插件对设计者和开发者都有很大的帮助,希望大家能够喜欢:) 现 今互联网市场上提 ...
- ANDROID : java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String in android
Andriod系统包中现在已经自带加密函数,如果用apache的codec包则会报以上错误,用android.util.Base64以下方法代替org.apache.commons.codec.bin ...
- Servlet入门
1.在tomcat中新建一个day01web应用,然后在web应用中新建一个web-inf/classes目录:2.在classes目录中新建一个FirstServlet.java文件:package ...
- maven 问题解决 tools以及jconsole两个jar包 无效
在SVN上下载项目,结果完成后出现两个jar包不存在的情况 如下图: 然后,第一步就是去查看POM.xml文件是否配置了这两个文件,结果并没有,于是就更加奇怪了 所以怀疑是不是其他maven下载的ja ...
- 使用JPype实现Python调用JAVA程序
''' Created on 2016年6月1日 @author: cero ''' import jpype jvmPath = jpype.getDefaultJVMPath() ext_clas ...
- Android 与Unity交互之Toast消息
Toast.makeText(MainActivity.this,message.obj.toString(),Toast.LENGTH_SHORT).show();这一句代码不能直接放在 publi ...