Вот пример версии + даты последнего изменения, которую я извлекаю из истории версий S3:
Код: Выделить всё
version 11, last modified date: Mon Jul 31 14:00:00 2023" // Current version
version 10, last modified date: Thu Jun 15 13:00:00 2023"
version 9, last modified date: Wed May 31 12:00:00 2023"
version 8, last modified date: Fri May 05 12:00:00 2023"
version 7, last modified date: Thu Mar 30 18:00:00 2023"
version 6, last modified date: Wed Mar 15 13:00:00 2023"
version 5, last modified date: Wed Feb 01 16:00:00 2023"
version 4, last modified date: Tue Nov 29 10:00:00 2022"
version 3, last modified date: Wed Nov 09 10:00:00 2022"
version 2, last modified date: Fri Oct 07 13:00:00 2022"
version 1 last modified date: Tue Aug 09 11:00:00 2022"
version null, last modified date: Tue Jun 28 10:00:00 2022"
Если бы был только один объект, с которым я мог бы сравнить, это не было бы проблемой, но я не уверен, как лучше всего отсортировать этот список и найти, какая версия лучше всего соответствует переданное поле.
Я сохраняю значения, полученные от S3, в TreeMap (поэтому они всегда возвращаются отсортированными по дате), карта дерева выглядит так: Карта treeMap = new TreeMap();
Лучшим способом сравнения каждой даты будет сравнение их по одной, и если эта дата раньше эту дату, затем продолжайте сравнивать список до тех пор, пока он не закончится, а затем вырвитесь из цикла?
Для справки, вот код, который у меня есть сейчас, который технически работает, но я чувствую, что это совершенно неэффективно.
Код: Выделить всё
Date newestPdfDate = (Date) treeMap.keySet().toArray()[treeMap.size()-1];
String pdfVersionToReturn = treeMap.get(newestPdfDate);
for(int i = 0; i < treeMap.size(); i++)
{
Date pdfDate = (Date) treeMap.keySet().toArray()[i]; // Key
String pdfVersion = treeMap.get(pdfDate); // Value
if(applicationApprovedDate.before(pdfDate)) {
pdfVersionToReturn = pdfVersion;
break;
}
}
Подробнее здесь: https://stackoverflow.com/questions/781 ... aws-sdk-s3