我有一組日常數據,我使用mongo-java驅動程序從mongo數據庫中檢索。我所查詢的表格僅有今天的日常數據。一旦得到了結果集,我就可以在一天中(00:00 - 02:00,02:00 - 04:00等)每兩小時處理一次文檔中的一個字段(雙精度值)的平均值。在2小時的時間間隔內計算平均值的最有效方法
這是我目前使用的代碼。將日期數據映射到DailyData模型(使用JsonTransformer)後,每日數據列表將通過方法的參數發送。
我已經下調了代碼,使其更容易閱讀:
public List<Model> getDailyData(List<DailyData> data) throws ParseException {
//These are all the variables I use in my code, I have omitted their usage in this snippet in order to trim it down
double occurenceOfDateRange1 = 0;
double occurenceOfDateRange2 = 0;
double occurenceOfDateRange3 = 0;
double occurenceOfDateRange4 = 0;
double occurenceOfDateRange5 = 0;
double occurenceOfDateRange6 = 0;
double occurenceOfDateRange7 = 0;
double occurenceOfDateRange8 = 0;
double occurenceOfDateRange9 = 0;
double occurenceOfDateRange10 = 0;
double occurenceOfDateRange11 = 0;
double occurenceOfDateRange12 = 0;
double percentage1 = 0;
double percentage2 = 0;
double percentage3 = 0;
double percentage4 = 0;
double percentage5 = 0;
double percentage6 = 0;
double percentage7 = 0;
double percentage8 = 0;
double percentage9 = 0;
double percentage10 = 0;
double percentage11 = 0;
double percentage12 = 0;
List<Model> modelList = new ArrayList<Model>();
String pattern = "yyyy-MM-ddHH:mm:ss";
//There are 9 more date variables created like these three below (06:00:00, 08:00:00, 10:00:00 etc to 23:59:59)
String dateStr1 = getdate() + " 00:00:00"; //getDate() refers to a separate method in which I return the current date in yyyy/MM/dd string format
Date date1 = new SimpleDateFormat(pattern).parse(dateStr1);
String dateStr2 = getdate() + " 02:00:00";
Date date2 = new SimpleDateFormat(pattern).parse(dateStr2);
String dateStr3 = getdate() + " 04:00:00";
Date date3 = new SimpleDateFormat(pattern).parse(dateStr3);
//the other 9 date variables are created here
if (data != null) {
for (int num = 0; num < data.size(); num++) {
Date recordDate = new SimpleDateFormat(pattern).parse(data.get(num).getCheckDate());
//Ten more checks along with the following two are done, I have omitted them to slim the code down (checks between date3 and date4, between date4 and date 5 etc)
if (recordDate.after(date1) && recordDate.before(date2)) {
percentage1 += data.get(num).getPercentage();
occurenceOfDateRange1 += 1;
}
if (recordDate.after(date2) && recordDate.before(date3)) {
percentage2 += data.get(num).getPercentage();
occurenceOfDateRange2 += 1;
}
//checks for the rest of the dates are done here
}
Model model = new Model();
//the following if blocks are repeated 10 more times for percentage3 to percentage12
if (percentage1 != 0) {
model = new Model();
model.setDate_time_stamp(dateStr1);
if (occurenceOfDateRange1 != 0) {
model.setAvgPerc(percentage1/occurenceOfDateRange1);
} else {
model.setAvgPerc(0);
}
modelList.add(model);
}
if (percentage2 != 0) {
model = new Model();
model.setDate_time_stamp(dateStr2);
if (occurenceOfDateRange2 != 0) {
model.setAvgPerc(percentage2/occurenceOfDateRange2);
} else {
model.setAvgPerc(0);
}
modelList.add(model);
}
}
return modelList;
}
我的問題是 - 是否有計算兩之間的平均百分比的更有效(或者更聰明,如果你願意)方式每小時的間隔沒有使用如此多的if塊?
嗯...你可以使用任何其他變量'雙[] occurenceOfDateRanges'和'雙[] percentages'(和數組,你以這種方式使用)和一個簡單的循環。 – Seelenvirtuose
你可以用毫秒來解析時間,用'2 * 60 * 60 * 1000'除以區間數。 –