2012-01-09 2 views
2

Мне интересно, какой лучший способ, учитывая объекты TreeSet of Date, указать, являются ли эти даты ежедневными или месячными. Обратите внимание, что в наборе ежедневных дат не будут указаны даты для выходных или праздничных дней. Набор ежемесячных дат будет иметь даты окончания месяца. Набор дат будет охватывать несколько лет.Каков наилучший способ узнать, является ли коллекция дат ежемесячной или ежедневной?

Единственный способ, о котором я могу сейчас думать, это взять первые 12 дат из набора и проверить месяц каждой даты. Если месяц встречается более одного раза подряд, то это, скорее всего, будет набор ежедневных дат. Если нет, то можно предположить, что это набор месячных дат.

Хотя кажется, что он должен работать (я не могу думать о каких-либо крайних случаях, которые он пропустил) Мне было интересно, было ли более элегантное решение? Я бы предположил какую-то структуру данных (дерево?), Которая использует компаратор на основе месяца и года. Тогда, если поддерево этого набора содержало более одного узла, я мог предположить, что они были ежедневными датами. Я не уверен, обеспечит ли этот способ дополнительный код или будет доступно лучшее решение. Спасибо за любую помощь, которую вы можете мне дать.

+2

Что мешает вам идентифицировать их, когда они созданы? – Viruzzo

+0

Это обновление существующей функциональности, поэтому на самом деле нет возможности модифицировать большую часть кода. Кроме того, даты первоначально исходят от источника, находящегося за пределами нашей программы. – Paul

ответ

1

Единственный способ, о котором я могу сейчас думать, это взять первые 12 дат из набора и проверить месяц каждой даты. Если месяц встречается более одного раза подряд, то это, скорее всего, будет набор ежедневных дат. Если нет, то можно предположить, что это набор месячных дат.

Это не обязательно будет работать.

Возможно, вам необходимо проверить каждую дату в наборе, чтобы определить, является ли день недели, и день конца месяца ... или оба!

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

Вы не получите каких-либо преимуществ в области производительности из-за того, что коллекция является TreeSet.

+0

Спасибо за быстрый ответ. Не могу поверить, что я этого не замечал! Поэтому я полагаю, что решение, как вы говорите, должно определить, есть ли последовательные даты с учетом выходных дней и месяцев, в которые месяц мог перевернуться. Я полагаю, что существует вероятность того, что данные за день могут отсутствовать по другой причине (они исходят из автоматизированного источника за пределами нашей системы). Это только немного сложнее! – Paul

+0

Если эти данные поступают из источника, который вы не контролируете, и есть сомнения в качестве данных, то вам необходимо тщательно проверить наличие плохих данных. В любом случае стоимость выполнения тщательной оценки, вероятно, не имеет значения. Код «элегантность» может быть роскошью. Простота - это, как правило, лучшее соотношение цены и качества. –

+0

Правда. Я буду помнить об этом, спасибо. Я отвечу на голосование, когда я получу достаточно очков репутации, чтобы сделать это. – Paul

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