Сортировка даты XMLGregorianCalendar в Stream
Есть код:
Collection<Project> projects = projectsRep.stream()
.filter(t -> t.getDateFinish() != null)
.sorted(Comparator.comparing(Project::getDateFinish))
.collect(Collectors.toList());
printTasks(projects);
Метод getDateFinish() возвращает дату в формате XMLGregorianCalendar и отказывается сортировать. Как отсортировать эту коллекцию по дате? При типе даты Date() все хорошо сортирует. Ругается здесь: Project::getDateFinish
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
В этом случае вам нужен компаратор. Выглядит он как отдельный класс:
import java.util.Comparator;
import javax.xml.datatype.XMLGregorianCalendar;
public class DateComparator implements Comparator<XMLGregorianCalendar>{
@Override
public int compare(XMLGregorianCalendar date1, XMLGregorianCalendar date2) {
return date1.compare(date2);
}
}
А теперь добавим его в наш стрим:
Collection<Project> projects = projectsRep.stream()
.filter(t -> t.getDateFinish() != null)
.sorted(Comparator.comparing(Project::getDateFinish, new DateComparator()))
.collect(Collectors.toList());
Либо боле короткий вариант:
Collection<Project> projects = projectsRep.stream()
.filter(t -> t.getDateFinish() != null)
.sorted(Comparator.comparing(Project::getDateFinish, XMLGregorianCalendar::compare).reversed())
.collect(Collectors.toList());