计算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 问题描述 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的 ...
随机推荐
- 用jQuery Mobile做HTML5移动应用的三个优缺点
JQuery Mobile 和 HTML5 的 3个优点 1. 上手迅速并支持快速迭代:在一个星期多一点的时间里,通过阅读JQuery Mobile文档以及O’Reilly出版的JQuery Mobi ...
- Angular JS的依赖注入
依赖注入是一个在组件中给出的替代了硬的组件内的编码它们的依赖关系的软件设计模式.这减轻一个组成部分,从定位的依赖,依赖配置.这有助于使组件可重用,维护和测试. AngularJS提供了一个至高无上的依 ...
- 初学者的python学习笔记2
本来想是先把作业二搞定的,结果发现作业二用的字典,一脸懵逼,还是先搞定第二课吧.其实第二课和第一课内容差不多,据说是第一课的老师去美国了……不管怎么样先整理一下吧. ----------------- ...
- Java之多线程开发时多条件Condition接口的使用
转:http://blog.csdn.net/a352193394/article/details/39454157 我们在多线程开发中,可能会出现这种情况.就是一个线程需要另外一个线程满足某某条件才 ...
- 伪装的方式实现js继承
看起来属性放到"父类"里了,这种方式原型中还是有属性的,只不过在"子类"的构造器中用call方法调用父类构造函数的时候,"子类"被强行赋值了 ...
- Schedule 学习
现在做的项目都有用到Schedule,现在用一点时间来总结. 一.首先要到Nuget中下载Quartz.net. 二.下载下来了,你需要对它进行配置,使它能给你正常的使用. 三.在Global.asa ...
- iShare.js分享插件
iShare.js是一个小巧的分享插件,纯JS编写,不依赖任何第三方库,使用简便. 为啥写这个插件? 因为在搭建个人blog时(还没有搭建好(¯﹃¯)),对目前国内比较受欢迎的分享插件都不太满意,主要 ...
- 基于eclipse-java的平台上搭建安卓开发环境
首先感谢好人的分享!http://www.mamicode.com/info-detail-516839.html 系统:windows 7 若想直接安装eclipse—android的,请启动如下传 ...
- oracle xmltype导入并解析Excel数据 (一)创建表与序
表说明: T_EXCEL_IMPORT_DATASRC: Excel数据存储表,(使用了xmltype存储Excel数据) 部分字段说明: BUSINESSTYPE: Excel模板类型,一个Exce ...
- BackTrack5-r3安装中文版的firefox火狐浏览器
在BT终端中输入:sudo apt-get install firefox 按回车在火狐地址栏里输入"about:config" 回车,点我同意.然后在过滤器里输入"ge ...