如何按字符串格式按升序和降序对日期的Arraylist进行排序

Mit*_*att 5 java android

我有Dates的数组列表,这是String格式,那么我该如何排序这个arraylists,

ArrayList<String> aryBeginDate;
ArrayList<String> aryDueDate;

for (int i = 0; i < arySubject.size(); i++) {

    RowItem row = new RowItem();
    row.setSubject(arySubject.get(i).toString());
    row.setUser(aryFromUser.get(i).toString());

    if (aryBeginDate.equals(" ")) {
        row.setStartDate(" ");
    } else {
        row.setStartDate(aryBeginDate.get(i).toString()); \\Have to sort at this line
    }

    if (aryDueDate.equals(" ")) {
        row.setEndDate(" ");
    } else {
        row.setEndDate(aryDueDate.get(i).toString()); \\Have to sort at this line
    }

    aryListBean.add(row);

}
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 12

如果需要日期,请不要使用字符串.使用日期.您应该只在显示日期时将日期转换为字符串.否则,代码中的任何位置,日期都应为Date类型.这是允许按时间顺序排序的原因,因为日期具有按时间顺序排列的自然顺序.

因此,一旦RowItema startDate和a endDate都是类型Date,您可以使用简单的比较器按开始日期对行项列表进行排序:

Collections.sort(rowItems, new Comparator<RowItem>() {
    @Override
    public int compare(RowItem r1, RowItem 2) {
        return r1.getStartDate().compareTo(r2.getStartDate());
    }
}); 
Run Code Online (Sandbox Code Playgroud)

另外,修复if/else块的缩进,因为你的方式真的不可读:

if (aryBeginDate.equals(" ")) {
    row.setStartDate(" ");
} 
else {
    row.setStartDate(aryBeginDate.get(i).toString());
}
Run Code Online (Sandbox Code Playgroud)