Мне нужно отслеживать рабочие часы за последние 7 дней в цикле чтения плоского файла. Он используется для измерения «утомляемости» рабочих списков.
Прямо сейчас у меня есть кое-что, что работает, но оно кажется довольно многословным, и я не уверен, есть ли более краткий шаблон.
В настоящее время у меня есть класс Java со статическим массивом для хранения данных за последние x дней, затем, когда я читаю файл, я отсекаю первый элемент и перемещаю остальные 6 (для скользящего общего количества за неделю) назад на один. Обработка этого статического массива выполняется собственным методом, т.е.
/**
* Generic rolling average/total method. Keeps adding to an array of
* last 'x' seen.
* @param d Datum point you want to add/track.
* @param i Number of rolling periods to keep track of eg. 7 = last 7 days
* NOT USED AT MOMENT DURING TESTING
* @param initFlag A flag to initialize static data set back to empty.
* @return The rolling total for i periods.
*/
private double rollingTotal(double d, boolean initFlag) {
// Initialize running total array eg. for new Employyes
if (initFlag) {
runningTotal = null;
}
else {
// move d+1 back to d eg. element 6 becomes element 5
for (int x = 0; x< 6 ; x++) {
runningTotal[x] = runningTotal[x+1];
}
// Put current datum point at end of array.
runningTotal[6]= d;
}
// Always return sum of array when this method is called.
double myTotal = 0.0;
for (int x = 0; x<7; x++) {
myTotal+= runningTotal[x];
}
System.err.print(Arrays.toString(runningTotal)+ '\n' );
return myTotal;
}
Мой вопрос: это разумный подход к дизайну, или есть что-то ослепительно очевидное и простое для выполнения этой задачи? Спасибо, парни