У меня возникла проблема, когда я считаю, что мне нужно объединить несколько концепций, о которых я читаю, но я не могу найти способ их объединения, который имеет смысл или что было бы наиболее эффективным. Вот моя ситуация:
Я работаю с микросервисами, поэтому это так странно специфично. По сути, я получаю список объектов Volume из другого сервиса. Объект Volume содержит три поля: тип String, дату String (которая на самом деле представляет время в формате «ЧЧ: мм», виноваты разработчики моделей данных в соглашениях об именах) и int close.
Что я пытаюсь сделать, так это взять этот список объектов и отсортировать по дате (времени), а затем создать новый список объектов, который будет содержать те же даты (время), но будет иметь разные значения полей на основе расчетов, которые я делает. Я считаю, что для сортировки по времени мне нужно преобразовать поля времени в объекты Date, а затем сравнить их. Я изо всех сил пытаюсь перебирать объекты и сравнивать преобразованные поля. Что-то, что, как мне кажется, поставило меня на правильный путь, это: field">Как отсортировать список‹Объект› по алфавиту, используя поле имени объекта
Но я не могу заставить это работать. Вот мой код:
volumeResources.sort(volumeResources, new Comparator<VolumeResource>(){
@Override
public int compare(VolumeResource v1, VolumeResource v2) {
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
try {
Date d1 = format.parse(v1.getDate());
Date d2 = format.parse(v2.getDate());
} catch (ParseException e) {
log.error("Error in parsing string to date. ", e);
}
return d1.compareTo(d2);
}
});
Теперь сразу же я знаю, что это должно быть неправильно, потому что я начал сравнивать VolumeResources v1 и v2, но вместо этого попытался сравнить даты в конце. Вместо приведенного выше оператора return я также попробовал приведенный ниже, но я не думаю, что он всегда будет работать, потому что на самом деле он не устанавливает форматированный объект в объект Date:
return format.parse(v1.getDate()).compareTo(format.parse(v2.getDate()));
Так вот где я потерялся. Это кажется довольно простой необходимостью, когда она описана в псевдокоде, но я не могу понять, как заставить ее работать функционально. Бонусные баллы, если есть способ, которым я могу легко заполнить другие поля, которые мне нужны, из этого. Двойные бонусные баллы за использование лямбда-выражений или за помощь в повышении эффективности.
Спасибо за любую помощь всем.