按降序对日期进行排序

时间:2018-07-17 01:27:33

标签: java sorting date

我正在尝试根据列表中的日期字段以降序对数组列表进行排序。这是我提取字符串格式的日期列表的方法:

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"

然后,我在网上找到了some solution,但是由于我的对象没有对象,因此我不确定如何将它们实际应用于我的案子,因此我无法做类似Collections.sort(myList, new Comparator<MyObject> {}

的操作

3 个答案:

答案 0 :(得分:4)

我相信您可以否定比较来切换顺序。像

loading

答案 1 :(得分:1)

通过使用以下代码,我设法将其降序排列:

>>> import csv
>>> dir(csv)
['Dialect', 'DictReader', 'DictWriter', 'Error', 'OrderedDict', 'QUOTE_ALL', 'QUOTE_MINIMAL', 'QUOTE_NONE', 'QUOTE_NONNUMERIC', 'Sniffer', 'StringIO', '_Dialect', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', 'excel', 'excel_tab', 'field_size_limit', 'get_dialect', 'list_dialects', 're', 'reader', 'register_dialect', 'unix_dialect', 'unregister_dialect', 'writer']

答案 2 :(得分:0)

最佳解决方案:正确进行数据建模。为列表中的对象而不是内部列表使用适当的类。在该课程中,使用LocalDate作为您的日期。避免使用Date类,该类已经过时了,尽管它的名称并不代表日期,而是一个时间点,但这不是您所需要的。您的类是应该实现Comparable还是应该使用比较器进行排序是一个设计决策,在该决策中,我无法根据已有信息提出建议。您可以在那里找到很多很好的例子。

在某些特殊情况下,列表列表就在这里,我也没有信息可告知,但就大多数目的而言并非如此。

如果每个日期最多出现一次,则是第二个最佳解决方案:将所有内部列表放入一个TreeMap对象作为关键字,LocalDate作为比较器的Comparator.reverseOrder()中。再次避免使用Date,当然也要避免使用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和朋友来指定比较器不仅麻烦,而且最不容易出错。