Java 计算均值
/** * 计算均值 * <p> * Author YangXuyue * Date 2019/4/8 10:18 */ public class ReflectionTest { @Test public void test() { Value v1 = new Value(BigDecimal.valueOf(4.0), BigDecimal.valueOf(9.0)); Value v2 = new Value(BigDecimal.valueOf(8.0), null); List<Value> valueList = new ArrayList<Value>() {{ add(v1); add(v2); }}; System.out.println(calculateValue(valueList)); } private Value calculateValue(List<Value> valueList) { Value v = new Value(null, null); Field[] fieldArray = v.getClass().getDeclaredFields(); Field tempField; Object object, tempObject; BigDecimal bigDecimal, tempBigDecimal; for (Field field : fieldArray) { try { for (Value value : valueList) { tempField = value.getClass().getDeclaredField(field.getName()); // 只针对BigDecimal类型的class if (Objects.equals(tempField.getType(), BigDecimal.class)) { tempField.setAccessible(true); tempObject = tempField.get(value); if (null != tempObject) { field.setAccessible(true); object = field.get(v); if (null == object) { field.set(v, tempObject); } else { bigDecimal = (BigDecimal) object; tempBigDecimal = (BigDecimal) tempObject; field.set(v, bigDecimal.add(tempBigDecimal)); } } } } int length = valueList.size(); field.setAccessible(true); object = field.get(v); if (object instanceof BigDecimal) { bigDecimal = (BigDecimal) object; bigDecimal = bigDecimal.divide(BigDecimal.valueOf(length), 2, BigDecimal.ROUND_HALF_UP); field.set(v, bigDecimal); } } catch (Exception e) { // ignored } } return v; } public class Value { private BigDecimal v1; private BigDecimal v2; public Value(BigDecimal v1, BigDecimal v2) { this.v1 = v1; this.v2 = v2; } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } public BigDecimal getV1() { return v1; } public void setV1(BigDecimal v1) { this.v1 = v1; } public BigDecimal getV2() { return v2; } public void setV2(BigDecimal v2) { this.v2 = v2; } } }