首页 >社区问答列表 >java - 如何更好的计算两个相同格式的Array数据的平均值

java - 如何更好的计算两个相同格式的Array数据的平均值

现有两个格式相同JSONArray

一个为新增的数据

saveArray:[{"name":"名字1","value":10},{"name":"名字2","value":12},...,{}]

一个为平均值数据

avgArray:[{"name":"名字1","value":11},{"name":"名字2","value":13},...,{}]

知道计算平均值的数量 int num = 10;

然后根据新增数据,计算平均值后,更新已有的平均值记录:

最后得到:

newAvgArray:[{"name":"名字1","value":(10 x 11 + 10)/11},{"name":"名字2","value":(13 x 10 +12)/11},...,{}]

我能想到的办法就是:

for (int i = 0;i < avgArray.size();i++){
   avgObj = avgArray.get(i).get("value");
   addValue = saveArray.get(i).get("value");
   //然后计算新的值保存新的Array
}

有没有更好的办法去计算

  • 为情所困
  • 为情所困    2017-06-23 09:15:231楼

        public static void getNewArrayAvg(JSONArray add,JSONArray avg,int num){
            JSONArray res = new JSONArray();
            int size = add.size();
            int range = avg.size();
            for (int i = 0; i < size; i++) {
                String key = add.getJSONObject(i).getString("name");
                double avgNum = add.getJSONObject(i).getDoubleValue("value")/(num+1.0);
                for (int j = 0; j < range; j++) {
                    if (key.equals(avg.getJSONObject(j).getString("name"))) {
                        avgNum += avg.getJSONObject(j).getDoubleValue("value") * (num/(num+1.0));
                        JSONObject tmp = new JSONObject();
                        tmp.put("name", key);
                        tmp.put("value", avgNum);
                        res.add(tmp);
                        break;
                    }
                }
            }
            res.toString();
        }

    应该有大神能够用lambda骚气的操作,但就你的要求而言,只能取值重新计算,另外,你要多审题。
    不能下面这种操作,要确保name的值能够对应上。

       avgObj = avgArray.get(i).get("value");
       addValue = saveArray.get(i).get("value");

    +0添加回复

  • 回复