Я работаю над классом, который будет содержать объекты с отметкой времени и несколькими измерениями.Эти измерения обычно проводятся с 08:00 до 16:00 каждый будний день, но они должны быть гибкими.Теперь я хочу иметь возможность указать временной интервал, скажем, 1 час, и получить среднее значение.Что-то вроде myArrayList.getAvrageHeight (), и оно возвращает среднюю высоту из всех измерений за последний час.Я планирую сохранить в списке только необходимые записи и удалить те, для которых истек срок ожидания.
Выполнение этого в течение одного дня довольно просто.Но я хотел бы, чтобы при вызове этого метода в 08.15 во вторник утром myArrayList содержал данные за 45 минут с понедельника и данные за 15 минут со вторника.
Одно из моих самых больших ограничений заключается в том, чтоизмерения выполняются с произвольными интервалами, начиная от 1 минуты и до нескольких раз в секунду.
До сих пор я получил это для вычисления средних значений каждый раз, когда добавляется измерение:
protected void computeAvrages() {
averageWeight = 0;
averageSpeed = 0;
averageHeight = 0;
for (int i = 0; i < super.size(); i++) {
averageWeight += super.get(i).getWeight();
averageSpeed += super.get(i).getSpeed();
averageHeight += super.get(i).getHeight();
}
averageWeight = averageWeight/super.size();
averageSpeed = averageSpeed/super.size();
averageHeight = averageHeight/super.size();
}
Мои объекты выглядят так:
public class Car {
double weight;
double speed;
double height;
int timeStamp;
public Car(int timeStamp, double weight, double speed, double height) {
this.timeStamp = timeStamp;
this.weight = weight;
this.speed = speed;
this.height = height;
}
public double getWeight() {
return weight;
}
public double getSpeed() {
return speed;
}
public double getHeight() {
return height;
}
public double getTimeStamp() {
return timeStamp;
}
}
myArrayList сортируется по метке времени в порядке возрастания (я могу использовать бинарный поиск в этом списке), и количество записей, которые я планирую хранить, будет составлять от 1.000-> 500 000 в зависимости от трафика (около 3 автомобилей в секунду в течение недели). Интервал времени сохраняется в секундах, поэтому при указании 1 часа я сохраняю его как 3600.
Когда я вызываю myArrayList.add(aCar), вызывается computeAvrages, но мне интересно следующее:
- Как мне следует изменить понедельник -> вторник, aи с пятницы по понедельник?
- В настоящее время я сохраняю время запуска и остановки как startHour, startMinute, stopHour и stopMinute для простоты. Как бы вы сохранили эти временные ссылки?
Эта проблема может быть сложной для стека и потока ответов типа вопрос-ответ, но я постараюсь сделать ее проще:
Вы смотрите на шоссе.Машины проезжают мимо.Каждый проезжающий автомобиль записывается с указанием веса, роста и скорости.Теперь я хочу указать время суток (т.е. с 08:00 до 16:00), которое меня интересует.Интересны только автомобили, которые проезжают мимо в течение рабочей недели (или понедельник -> пятница). Я бы оставлял проезжающие мимо автомобили только в этот период, но я все равно получал уведомления об автомобилях, которые проезжали за пределами этого периода.
Затем я хочу вычислить среднее значение за 1 час проезжающих машин в течение моего периода времени.Но во вторник в 08:15 меня не интересует только получение среднего значения за последние 15 минут, но я хочу получить среднее значение за последние 45 минут в понедельник в сочетании с первыми 15 вторниками.Так что мои вопросы выше применимы.