• 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;
            }
        }
    }
  • 相关阅读:
    【抓包】Charles设置断点
    获取绑定到DataGridView中某一行的数据
    持续集成经验分享Bamboo+Ant+SVN的构建方案
    JIRA.HOME locked被锁的解决方案
    JIRA使用说明
    jira 4.2 使用Oracle数据库的详细安装(含破解)
    Linux + JIRA4.2 + MySQL安装&破解&配置攻略
    EXECUTE IMMEDIATE oracle介绍
    园子里的哪位大哥给我说说WinCE程序的开发,谢谢了
    PL/SQL DEVELOPER中的专用复制(Special Copy)
  • 原文地址:https://www.cnblogs.com/yang21/p/10669154.html
Copyright © 2020-2023  润新知