<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer</artifactId>
<version>5.5.1</version>
</dependency>
无需依赖
/**
*
* @param <T>
* @param all 返回总和Bean
* @param list 求和数据
* @param BeanNames 求和字段
* @return
*/
public static <T> T setSumListsToBean(T all,List <T> list,List<String> beanNames) {
for(int i=0;i<beanNames.size();i++) {
String field =beanNames.get(i);
if(StringUtils.isBlank(field)) {
continue;
}
try {
Integer intFieldAll = 0;
BigDecimal bigFieldAll = BigDecimal.ZERO;
Field declaredField = all.getClass().getDeclaredField(field);
for(Object bean :list) {
declaredField.setAccessible(true);
Object value = declaredField.get(bean);
if (value instanceof Integer) {
intFieldAll = intFieldAll+(Integer)value;
}else if(value instanceof BigDecimal) {
bigFieldAll =bigFieldAll.add((BigDecimal)value);
}else {
intFieldAll = -1;
bigFieldAll =null;
break;
}
}
if(bigFieldAll!=null&&intFieldAll!=-1) {
if(intFieldAll==0) {
BeanUtils.setProperty(all,field,bigFieldAll);
}else if(bigFieldAll.equals(BigDecimal.ZERO)) {
BeanUtils.setProperty(all,field,intFieldAll);
}
}
}catch (Exception e) {
}
}
return all;
}
/**
*
* @param <T>
* @param all 返回总和Bean
* @param list 求和数据
* @param ignoreFieldNames忽略求和字段
* @return
*/
public static <T> T setSumListsToBeanIgnore(T all,List <T> list,List<String> ignoreFieldNames){
Field[] fields = all.getClass().getDeclaredFields();
for(int i=0;i<fields.length;i++) {
try {
String field = fields[i].getName();
if(ignoreFieldNames.contains(field)) {
continue;
}
Integer intFieldAll = 0;
BigDecimal bigFieldAll = BigDecimal.ZERO;
for(Object bean :list) {
fields[i].setAccessible(true);
Object value = fields[i].get(bean);
if (value instanceof Integer) {
intFieldAll = intFieldAll+(Integer)value;
}else if(value instanceof BigDecimal) {
bigFieldAll =bigFieldAll.add((BigDecimal)value);
}else {
intFieldAll = -1;
bigFieldAll =null;
break;
}
}
if(bigFieldAll!=null&&intFieldAll!=-1) {
if(intFieldAll==0) {
BeanUtils.setProperty(all,field,bigFieldAll);
}else if(bigFieldAll.equals(BigDecimal.ZERO)) {
BeanUtils.setProperty(all,field,intFieldAll);
}
}
}catch (Exception e) {
// ignore
// logger.error("setSumLists", e);
}
}
return all;
}
/**
*
* @param <T>
* @param all 返回总和Bean
* @param list 求和数据
* @param BeanNames 求和字段
* @return
*/
public static <T> T setSumListsToBean(T all,List <T> list,List<String> beanNames){
DozerBeanMapper dozerBeanMapper = RuntimeApplicationContext.getBean(DozerBeanMapper.class);
for(int i=0;i<beanNames.size();i++) {
String field =beanNames.get(i);
if(StringUtils.isBlank(field)) {
continue;
}
Integer intFieldAll = 0;
BigDecimal bigFieldAll = BigDecimal.ZERO;
for(Object bean :list) {
Map map = dozerBeanMapper.map(bean, Map.class);
Object value = map.get(field);
if (value instanceof Integer) {
intFieldAll = intFieldAll+(Integer)value;
}else if(value instanceof BigDecimal) {
bigFieldAll =bigFieldAll.add((BigDecimal)value);
}else {
intFieldAll = -1;
bigFieldAll =null;
break;
}
}
try {
if(bigFieldAll!=null&&intFieldAll!=-1&&(fields[i].getType().equals(Integer.class)||fields[i].getType().equals(BigDecimal.class))) {
if(intFieldAll==0) {
BeanUtils.setProperty(all,field,bigFieldAll);
}else if(bigFieldAll.equals(BigDecimal.ZERO)) {
BeanUtils.setProperty(all,field,intFieldAll);
}
}
}catch (Exception e) {
}
}
return all;
}
/**
*
* @param <T>
* @param all 返回总和Bean
* @param list 求和数据
* @param ignoreFieldNames忽略求和字段
* @return
*/
public static <T> T setSumListsToBean(T all,List <T> list,List<String> ignoreFieldNames){
DozerBeanMapper dozerBeanMapper = RuntimeApplicationContext.getBean(DozerBeanMapper.class);
Field[] fields = all.getClass().getDeclaredFields();
for(int i=0;i<fields.length;i++) {
String field = fields[i].getName();
if(ignoreFieldNames.contains(field)) {
continue;
}
Integer intFieldAll = 0;
BigDecimal bigFieldAll = BigDecimal.ZERO;
for(Object bean :list) {
Map map = dozerBeanMapper.map(bean, Map.class);
Object value = map.get(field);
if (value instanceof Integer) {
intFieldAll = intFieldAll+(Integer)value;
}else if(value instanceof BigDecimal) {
bigFieldAll =bigFieldAll.add((BigDecimal)value);
}else {
intFieldAll = -1;
bigFieldAll =null;
break;
}
}
try {
if(bigFieldAll!=null&&intFieldAll!=-1&&(fields[i].getType().equals(Integer.class)||fields[i].getType().equals(BigDecimal.class))) {
if(intFieldAll==0) {
BeanUtils.setProperty(all,field,bigFieldAll);
}else if(bigFieldAll.equals(BigDecimal.ZERO)) {
BeanUtils.setProperty(all,field,intFieldAll);
}
}
}catch (Exception e) {
// ignore
// logger.error("setSumLists", e);
}
}
return all;
}