2017-10-07 21 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());