从java中的给定列表获取每个月的最后一天

时间:2017-10-07 14:26:26

标签: java list date

列出如下日期:(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代码中需要帮助,如果你已经有代码来实现这一点,那么我很高兴。

2 个答案:

答案 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());