列出如下日期:(DD-MM-YYYY)
30-09-2017
22-09-2017
15-09-2017
30-08-2017
22-08-2017
15-07-2017
30-07-2017
22-06-2017
15-06-2017
30-05-2017
22-05-2017
15-05-2017
从上面的列表中,必须获取最近三个月的最后一天。处理完上面后,列表输出必须如下:
30-09-2017
30-08-2017
30-07-2017
在java代码中需要帮助,如果你已经有代码来实现这一点,那么我很高兴。
答案 0 :(得分:2)
使用LocalDate
将每个字符串解析为DateTimeFormatter.ofPattern
。从那里,获得YearMonth
。
使用Map
键作为YearMonth
,并使用SortedSet
作为值。将每个LocalDate
添加到SortedSet
以获取其相应的YearMonth
。
完成添加后,查看每个SortedSet
,提取该月份中使用的最新日期的最后一个元素。将每个上一个日期添加到List
。完成添加后,对List
进行排序。
瞧!
答案 1 :(得分:1)
我会对列表进行流式处理,并将每个字符串解析为相应的YearMonth
。然后,您可以使用不同的最后三个并将它们转换回字符串:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
List<String> lastDays =
dates.stream()
.map(d -> YearMonth.parse(d, formatter))
.distinct()
.sorted(Comparator.reverseOrder())
.limit(3)
.map(m -> m.atEndOfMonth().toString())
.collect(Collectors.toList());