在Java中将日期列表排序为字符串

在Java中将日期列表排序为字符串,java,Java,我的arrayList中有一个日期列表作为字符串。我需要从这个列表中获得最低的日期值,然后与“dd-MM-yy”格式的日期进行比较。我该怎么做 这是我的密码: List<String> dateList = new ArrayList<String>(); for(DailyDataReading ddr: finalResult){ dateList.add(sdf.format(ddr.getDailyReadingDate())); } Collectio

我的arrayList中有一个日期列表作为字符串。我需要从这个列表中获得最低的日期值,然后与“dd-MM-yy”格式的日期进行比较。我该怎么做

这是我的密码:

List<String> dateList = new ArrayList<String>();
for(DailyDataReading ddr: finalResult){
    dateList.add(sdf.format(ddr.getDailyReadingDate()));
}

Collections.sort(dateList);

if((sdf.format("date which is to be compared")).compareTo(dateList.get(dateList.size()-1))<=0)
 {...}
List dateList=new ArrayList();
用于(DailyDataReading ddr:finalResult){
add(sdf.format(ddr.getDailReadingDate());
}
集合。排序(日期列表);

如果((sdf.format(“要比较的日期”)).compareTo(dateList.get(dateList.size()-1))如果您的字符串都是格式为
dd-MM-yy
的日期值,并且您希望按时间顺序对这些日期字符串进行排序,假设所有年份都是从本世纪开始的(即2000-2099年),那么这就是您的方法

Collections.sort(dateList, (d1,d2) -> {
    int cmp = d1.substring(6, 8).compareTo(d2.substring(6, 8));
    if (cmp == 0)
        cmp = d1.substring(3, 5).compareTo(d2.substring(3, 5));
    if (cmp == 0)
        cmp = d1.substring(0, 2).compareTo(d2.substring(0, 2));
    return cmp;
});
“此列表中的最低日期值”是第一个值,即
日期列表。获取(0)

列表日期列表;//这是字符串格式的日期列表
DateTimeFormatter DateTimeFormatter=DateTimeFormatter.ofPattern(“dd-MM-yy”);//这是一个格式设置程序,用于将模式转换为LocalDate
List dates=dateList.stream().map(dateString->LocalDate.parse(dateString,dateTimeFormatter)).collect(Collectors.toList());//使用Java8流将日期字符串映射到LocalDate对象
Collections.sort(dates);//对列表进行排序
LocalDate earliestDate=dates.get(0);//从列表中获取最低的日期值
LocalDate specialDate=LocalDate.parse(“某个日期”,dateTimeFormatter);//为要比较的日期创建一个日期对象
比较(特殊日期);//比较它们
排序(列出日期,新的CustomComparator())

公共类CustomComparator实现比较器{//MyObject将是模型类
日期日期1,日期2;
@凌驾
公共整数比较(MyObject对象J1、MyObject对象J2){
DateFormat df1=新的SimpleDateFormat(“dd,MMM-yyyy”);
试一试{
date1=df1.parse(obj1.getDate());
date2=df1.parse(obj2.getDate());
}捕获(解析异常){
e、 printStackTrace();
}
返回日期1.与(日期2)相比;
}
}
收款。反向(日期列表)


这将按最新的优先顺序对列表进行排序。

我看到您添加了代码。这是一个很好的开始。现在请尝试解释您认为此代码应该做什么/表示什么,以及它与您期望的有什么不同。实际上,我需要按降序排列日期,我不确定此集合是否为。sort()将以降序或随机顺序返回日期,因为日期是字符串格式的
集合。sort
而不使用
Comparator
参数将尝试使用自然顺序(它将假定所有元素实现
Comparable
并将使用
compareTo(其他)
方法提供的顺序)。无论如何,如果您要查找最小/最大值,则不需要对所有元素进行排序,通常对所有元素进行一次迭代就足以选择最小/最大值。如果您可以添加两行代码,这将非常有用。
List<String> dateList;// This is your list of dates in string format
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM-yy");// This is a formatter to convert from your pattern to a LocalDate
List<LocalDate> dates = dateList.stream().map(dateString -> LocalDate.parse(dateString, dateTimeFormatter)).collect(Collectors.toList());// Use Java 8 streams to map the dates strings to LocalDate objects
Collections.sort(dates);// Sort the list
LocalDate earliestDate = dates.get(0);// Take the lowest date value from the list
LocalDate specialDate = LocalDate.parse("some date", dateTimeFormatter);// create a date object for the date that you want to compare it to
earliestDate.compareTo(specialDate);// compare them
public class CustomComparator implements Comparator<MyObject> {// MyObject would be Model class
    Date date1,date2;
    @Override
    public int compare(MyObject obj1, MyObject obj2) {
        DateFormat df1 = new SimpleDateFormat("dd, MMM yyyy");
        try {
             date1 = df1.parse(obj1.getDate());
             date2 = df1.parse(obj2.getDate());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date1.compareTo(date2);
    }
}