Вы должны сохранить ваш compareTo()
метод в том виде, в котором он написан, потому что он сортируется в соответствии с естественным упорядочением (по возрастанию), что имеет смысл.
Вместо этого вы должны изменить сортировку, чтобы сказать ей сортировать в обратном порядке.(по убыванию).
List<ClientInfo> clientInfoList = ...
Collections.sort(clientInfoList, Comparator.reverseOrder());
ОБНОВЛЕНИЕ на основе информации, добавленной к вопросу:
Некоторые из ваших ClientInfo
не имеют документов, которые вы можете использовать для проверки даты создания.
Когда вы делаете это:
Date firstmaxDate = this.getDocuments().stream().map(d -> d.getCreateDate()).max(Date::compareTo)
max()
возвращает Optional<Date>
, что позволяет ему возвращать Optional.empty()
в случае пустого потока.Если у вас есть ClientInfo без какого-либо документа, вы вызываете get()
для пустого Optional
, что вызывает это исключение.
Вам необходимо определить, может ли этот случай возникнуть в реальных данных, иесли да, то как вы хотите отсортировать ClientInfo без документа.Если все ваши созданные вами даты уже в прошлом, вы можете просто заменить «нет даты создания» на «сейчас»:
Date thisDate = this.getDocuments()
.stream()
.map(Document::getCreateDate)
.max(Date::compareTo)
.orElseGet(Date::new);
Date otherDate = o.getDocuments()
.stream()
.map(Document::getCreateDate)
.max(Date::compareTo)
.orElseGet(Date::new);
Или вы можете остановиться до get()
, работать с Optional<Date>
и проверитьisPresent()
и при необходимости обращаться с ним.