2016-07-16 5 views
-2

Я пытаюсь написать код Java для следующей проблемы. Но я не могу найти оптимизированный способ решить эту проблему.Измельчение списка массивов java

У меня есть список источников времени и потребления кофе следующим образом. Я хочу рассчитать потребление кофе каждый час, и если в течение определенного часа нет потребления в течение следующего часа, первым будет потребление в течение этого часа.

Для примера:

У меня есть следующий список массива

Time  consumption of coffee 
2:15    5 cups 
2:30    6 cups 
2:45    7 cups 
3:05    2 cups 
3:45    6 cups 
5:05    1 cups 
5:30    2 cups 
7:15    1 cup 

поэтому я хочу, чтобы вычислить, что общее потребление в течение часа 2, который будет в этом случае 18 чашек с 2:00 до 3:00. От 3:00 до 4:00 - 8 чашек. Поскольку нет входа с 4:00 до 5:00, количество потребления в этом случае должно составлять количество потребляемого кофе в 5:05, которое составляет 1 чашку. Я хочу, чтобы мой результат до 7 часов. Поскольку у нас ничего нет в 6:00 -7: 00, тогда это будет 1 чашка, которая была бы равна 7:15.

Так что я хочу конечный результат общего потребления с 2:00 до 7:00 распределенную каждый час, как список массива следующим образом объекта

obj1 = T<2:00,3:00,18> 
obj2 = T<3:00,4:00,8> 
obj3 = T<4:00,5:00,1> 
obj4 = T<5:00,6:00,3> 
obj5 = T<6:00,7:00,1> 

finalList = <obj1,obj2,obj3,obj4,obj5> 

Я не в состоянии получить как измельчить список в час и посмотрите на следующее значение.

+4

Возможно, вам будет легче помочь, если вы разместите код, который у вас есть. – c0der

+1

Что произойдет, если (в вашем примере) у вас вместо этого было 3: 45-> 6 чашек; 5: 55-> 8 чашек; 7: 15-> 1 чашка'? Вы закончили бы считать 8 чашек для '4: 00-5: 00', а также 8 чашек для' 5:00 до 6: 00'? Это кажется довольно искаженным. –

+1

Итак, если в текущем временном диапазоне нет кофе, мы переходим к следующему интервалу? –

ответ

0

Вы полностью потеряли меня по логике заполнения пустого часа с первым значением со следующего часа. Но я все равно сделаю это.

Моё предположение предполагает, что ваши входные данные находятся в хронологическом порядке от более раннего до более позднего.

Определить класс CoffeeConsumption с двумя членами, LocalTime и Integer для ваших двух значений.

Создайте Map, возможно, SortedMap, например TreeMap. Ключ имеет тип Integer и представляет собой час дня от 0 до 23. Значение имеет тип Set, возможно, SortedSet, например TreeSet, для хранения пользовательских объектов, определенных выше.

Для каждого из ваших пользовательских объектов возьмите его LocalTime и позвоните по телефону getHour. Используйте этот номер часа, чтобы найти соответствующий ключ на карте, получить набор и добавить свой элемент.

Чтобы получить итоговые значения, скопируйте карту и зациклите каждый набор. Чтобы сохранить итоговые значения, создайте новый SortedMap с Integer как ключ для часового дня и Integer как значение для общего количества чашек, потребляемых часами.

Обратите внимание, что нет необходимости явно сохранять время в конце часа, как показано в вашем Вопросе. Вы всегда можете вычислить это значение: звоните LocalTime::plusHours(1).

Чтобы поддержать функцию move-first-item-to-previous-hour-if-empty, следуйте логике, которую я только что обозначил в этом дефис. Когда вы добавляете кофейный объект к карте без существующего ключа, но помещенного туда в течение этого часа, сначала вычтите один из часов и посмотрите на Карту для этого вычитаемого числа в качестве ключа. Если вычитаемый ключ отсутствует на Карте, поставьте его, создайте новый пустой набор, в который будет помещен кофейный объект, который в противном случае ушел бы в свой час. Предостережение: эта особенность имеет плохой запах и предполагает, что что-то не так с вашим дизайном или требование неправильно понято.

Смежные вопросы