簡體   English   中英

按降序對日期進行排序

[英]Sorting dates in descending order

我正在嘗試根據列表中的日期字段以降序對數組列表進行排序。 這是我提取字符串格式的日期列表的方法:

SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm a");
List<List<String>> list= viewModel.getAllData(reminderlist);

for(int i = 0; i < list.size(); i++){
   System.out.println("DATE " + list.get(i).get(3));
   System.out.println("DATE FORMAT " + formatter.parse(list.get(i).get(3));
}

println的樣本數據是:

"09/05/2019", "10/16/2017", "06/24/2020", "10/16/2017", "10/17/2015"

然后,我在線找到了一些解決方案,但是由於我沒有對象,因此我不確定如何將其實際應用於我的案件,因此我無法執行類似Collections.sort(myList, new Comparator<MyObject> {}

我相信您可以否定比較來切換順序。 就像是

      return -1*(o2.get(3).compareTo(o1.get(3)));

我設法通過使用下面的代碼將其降序排列:

     SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
    Collections.sort(templateDirs, (o1, o2) -> {
        if (o1.get(3) == null || o2.get(3) == null)
            return 0;
        try {
            boolean b =  formatter.parse(o1.get(3)).before(formatter.parse(o2.get(3)));
            return b ? 1:-1 ;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    });

最佳解決方案:正確進行數據建模。 為列表中的對象而不是內部列表使用適當的類。 在該類中,使用LocalDate作為您的日期。 避免使用Date類,因為它早已過時,盡管其名稱不代表日期,但代表時間點,這不是您所需要的。 您的類是應該實現Comparable還是應該使用比較器進行排序是一個設計決策,在此我無法根據已有的信息提出建議。 您可以在那里找到很多很好的例子。

可能有非常特殊的情況,要求此處列出一個列表,同樣,我也沒有信息可告知,但就大多數目的而言,事實並非如此。

如果每個日期最多發生一次,則是第二好的解決方案:將所有內部列表放入一個以LocalDate對象為鍵,而Comparator.reverseOrder()作為比較器的TreeMap 再次避免使用Date ,當然SimpleDateFormat避免使用SimpleDateFormat 眾所周知,后一類很麻煩。 使用DateTimeFormatter將日期字符串解析為LocalDate對象。 然后,將地圖中的所有值放入一個列表中,並將按日期降序對其進行排序。 使用這種方式,每個日期將僅被解析一次,而不是每次被比較。 由於您有2017年10月16日,數據中有兩次,請修改此解決方案,以使地圖值是列表列表,而不只是列表(字符串)。

較差的解決方案:使用比較器對列表列表進行排序,該比較器會從每個內部列表中刪除索引3處的元素,然后對其進行解析並進行比較。 使用以下比較器:

        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uuuu");
        Comparator<List<String>> descendingDateComparator = Comparator
                .comparing((List<String> l) -> LocalDate.parse(l.get(3), dateFormatter))
                .reversed();

使用Comparator.comparing和友人指定比較器不僅麻煩,而且最重要的是,它不容易出錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM