Потенциальное простое решение
Мне кажется, что вы изобретаете колесо здесь. Существует множество типов, представляющих дату и время, и создание собственного может привести к боли.
В этом случае я бы рекомендовал использовать LocalDateTime
из Joda Time .
Ответ на актуальный вопрос
Вы упоминаете «формат», как будто мы действительно имеем дело со строками - но я ничего не вижу там о строках.
Почему вы используете float
значения? Они кажутся натуральными целыми числами - хотя вам также понадобятся секунды.
Вы можете сделать свой тип реализации Comparable<T>
довольно легко и непринужденно - тогда вам просто нужно вызвать Collections.sort
, и это будет правильно. Вот пример реализации Comparable<Foo>
, предполагая, что ваш тип называется Foo
:
public int compareTo(Foo other)
{
if (other == null)
{
throw new NullPointerException();
}
if (year < other.year)
{
return -1;
}
if (year > other.year)
{
return 1;
}
if (month < other.month)
{
return -1;
}
if (month > other.month)
{
return 1;
}
// etc
// If we haven't returned after comparing everything
// then the values must be equal
return 0;
}
ответ chburd о реализации Comparer<T>
вместо этого одинаково действителен; если ваш объект просто дата / время, то у вас есть естественный порядок сортировки и, возможно, Comparable<T>
- лучший выбор; если у вас на самом деле есть больше свойств в объекте, и вы можете вместо этого отсортировать их, тогда Comparer<T>
будет лучше.