2017-10-07 22 views
-2

有日期的列表如下:(DD-MM-YYYY)充分利用给定列表中的Java

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代码的帮助,如果你已经代码来实现这一点,那么我很高兴。

+1

它是一个字符串或日期对象? – Ravi

+0

每天都会发生一次,还是有可能有一天会多次出现在该列表中? – deHaar

+2

你到目前为止尝试过什么?您需要知道,SO不是*代码编写服务*,我们不会为您提供纯粹*需求转储*的解决方案。所以请自行尝试,如果卡住了,请回拨,然后我们帮助解决您的具体问题。或者,如果您只是在寻求一个粗略的概述,那么请清楚地说明。 – Zabuza

回答

2

使用DateTimeFormatter.ofPattern将每个字符串解析为LocalDate。从那里,得到一个YearMonth

使用YearMonth作为关键字和SortedSet作为值作出Map。将LocalDate添加到SortedSet的适当位置YearMonth

完成添加后,查看每个SortedSet,提取该月份最新使用日期的最后一个元素。将每个最后日期添加到List。完成添加后,将其排序List

Voilà!

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