Java Collections.sort()但从右向左读取

Java Collections.sort()但从右向左读取,java,Java,我有一个名为Dates的arrayList,如下所示: "12-07-2017; 13-07-2017; 12-08-2017; 11-08-2019;" "12-07-2017; 13-07-2017; 12-08-2017; 11-08-2019" 通常情况下,集合的排序(日期)为: 但我希望它从右到左读取,而不是从左到右读取,以使Collections.sort(dates)应如下所示: "12-07

我有一个名为Dates的arrayList,如下所示:

     "12-07-2017;
      13-07-2017;
      12-08-2017;
      11-08-2019;"
   "12-07-2017;
    13-07-2017;
    12-08-2017;
    11-08-2019"
通常情况下,集合的排序(日期)为:

但我希望它从右到左读取,而不是从左到右读取,以使Collections.sort(dates)应如下所示:

     "12-07-2017;
      13-07-2017;
      12-08-2017;
      11-08-2019;"
   "12-07-2017;
    13-07-2017;
    12-08-2017;
    11-08-2019"

之所以会发生这种情况,是因为您正在按字典顺序对日期表示进行排序

执行此操作有两种选择:

  • 使用并传递一个比较器,该比较器解析日期以进行比较,或者
  • 将字符串转换为日期,对其进行排序,然后将结果转换回
    String
    s

假设您有一个
String
对象的
ArrayList
,每个字符串的格式为
dd-MM-yyyy
称为
dateStrings

首先,创建
SimpleDateFormat
对象,该对象将作为将
字符串
转换为
日期
对象并返回的基础

SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
然后将
String
对象的
ArrayList
转换为
Date
对象的
ArrayList

ArrayList<Date> dates = new ArrayList<>();
for (String dateString : dateStrings) {
    try {
        dates.add(dateFormat.parse(dateString));
    } catch (ParseException e) {
        System.out.println(e);
    }
}
ArrayList<String> orderedDateStrings = new ArrayList<>();
for (Date date : dates) {
    orderedDateStrings.add(dateFormat.format(date));
}
最后,将
Date
对象的
ArrayList
转换回
String
对象的
ArrayList

ArrayList<Date> dates = new ArrayList<>();
for (String dateString : dateStrings) {
    try {
        dates.add(dateFormat.parse(dateString));
    } catch (ParseException e) {
        System.out.println(e);
    }
}
ArrayList<String> orderedDateStrings = new ArrayList<>();
for (Date date : dates) {
    orderedDateStrings.add(dateFormat.format(date));
}
ArrayList OrderedDateString=new ArrayList();
用于(日期:日期){
添加(dateFormat.format(date));
}
现在,您已经拥有了
字符串的
数组列表
OrderedDateString
,其中的字符串按您所需的顺序排列


不要忘记导入所有
java.util.ArrayList、java.util.Collections、java.util.Date、java.text.ParseException、java.text.SimpleDateFormat

转换为
LocalDate
并进行排序?但是否还有从右向左读取的方法?那就简单多了。你可以写你自己的比较表,而不只是想从右向左读。如果您这样做,
13-07-2017
将在
13-07-2008
之前。您需要在自定义比较器中分别比较这些字符串的三个部分中的每一个。我如何才能做到这一点?尽管不会,但如果我有日期:例如2017年7月25日和2017年7月19日,它将把2017年7月25日放在第一位。为什么您需要
集合。reverseOrder()
?很抱歉,我在代码中犯了一些错误,现在就修复它们。