Java. Отсортировать даты по месяцам, используя Streams
У меня есть List<Date>, с датами в формате d/MMMM/yyyy, их нужно отсортировать по месяцам используя STREAM.
То есть, если есть:
4/February/2020
6/February/1990
11/April/2012
30/August/2011
8/September/2009
25/May/2021
То в итоге должно получиться:
6/February/1990
4/February/2020
11/April/2012
25/May/2021
30/August/2011
8/September/2009
Вот мой код, он просто сортирует по возрастанию:
public static List<Date> comp(List<Date> list){
return list.stream()
.sorted(Comparator.naturalOrder())
.collect(Collectors.toList());
}
Но как сделать как мне нужно я не знаю.
Ответы (1 шт):
Автор решения: Alex Rudenko
→ Ссылка
Нужно преобразовать в нормальный тип для работы с датой LocalDate и отсортировать его, затем преобразовать обратно если нужно возвращать именно List<Date>:
public static List<Date> comp(List<Date> list){
return list.stream()
.map(d -> d.toInstant()
.atZone(ZoneId.systemDefault()).toLocalDate())
.sorted(Comparator.comparingInt(LocalDate::getMonthValue)
.thenComparingInt(LocalDate::getYear))
.map(ld -> Date.from(ld.atStartOfDay()
.atZone(ZoneId.systemDefault()).toInstant()))
.collect(Collectors.toList());
}
Тест:
6/Feb/1990
4/Feb/2020
11/Apr/2012
25/May/2021
30/Aug/2011
8/Sep/2009