Здесь:
dosages = new ArrayList<DosageData>();
Вы создаете новый список за созданный вами объект DosageData. Поэтому, когда этот список, который вы намереваетесь отсортировать ..., содержит ровно один элемент (поскольку вы помещаете все предыдущие объекты DosageData в отдельные списки, а затем выбрасываете эти списки.
Список с одной записью может быть отсортирован без вызова какого-либо метода вашего компаратора.
Кроме того, в вашем коде много неправильного:
- Прежде всего: форматируйте / делайте отступ разумными способами. Грязный код облегчает просмотр ошибок.
- не используйте 3 разных метода для перебора ваших списков. Прямой способ итерации таких коллекций - использовать foreach , например:
for(Treatment treatment : list) { ...
. Не нужно использовать руководство для цикла, не нужно использовать итератор!
- это действительно плохая идея, что Comparator должен знать формат , который есть у ваших временных меток.
Руководство: помните, что ваш compare()
метод может вызываться много раз. Теперь обратите внимание, что этот метод создает средство форматирования данных и выполняет разбор двух дат. Каждый раз, когда это называют. Это не проблема, если в вашем списке есть 100 или 1000 записей. Но если вы говорите об элементах списка 100 КБ, то что-нибудь , которое вы делаете в compare()
, имеет значение для производительности. Таким образом: когда вы имеете дело с большими списками, подумайте о том, чтобы ваш класс реализовал интерфейс Comparable
и вычислял эту временную метку только один раз, во время создания объекта, чтобы избежать повторного форматирования и анализа.
Другими словами: ваш дизайн был бы намного чище, если бы объект DosageData уже содержал реальный объект Date вместо другого кода, который постоянно анализировал / форматировал строки. Весь этот код должен знать, какой формат использовать. Это плохая идея!
Наконец: наступил 2019 год. Узнайте о замечательных новых классах Date / Time, которые были добавлены в Java 8! Возможно, вы также захотите узнать о потоках, так как весь ваш исходный код может быть записан как
private List<DosageData> dosages = list.stream()
.map(t -> new DosageData(t))
.collect(Collectors.asList());
Вот и все.