現有兩個格式相同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:23
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");