5

我有日期数组列表,它是字符串格式,那么我该如何对这个数组列表进行排序,

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);

}
4

6 回答 6

12

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

因此,一旦RowItem具有 astartDate和 an endDate,两者都是 type Date,您可以使用简单的比较器按开始日期对行项目列表进行排序:

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

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

if (aryBeginDate.equals(" ")) {
    row.setStartDate(" ");
} 
else {
    row.setStartDate(aryBeginDate.get(i).toString());
}
于 2013-02-26T09:43:04.097 回答
4

非常简单的答案:对于升序,只需调用此方法:

Collections.sort(mArrayList, new OutcomeAscComparator());
public class OutcomeAscComparator implements Comparator<Select>
    {
        public int compare(Select left, Select right) {
            return left.getOutcome().compareTo(right.getOutcome());
        }
    }

选择是我的模型,降序:

Collections.sort(mArrayList, new OutcomeDescComparator());
public class OutcomeDescComparator implements Comparator<Select>
    {
        public int compare(Select left, Select right) {
            return right.getOutcome().compareTo(left.getOutcome());
        }
    }

如果您希望列表为升序和降序,请不要忘记刷新您的列表视图

                mListView.invalidateViews();

                mAdapter.notifyDataSetChanged();
于 2014-02-11T05:36:27.083 回答
1

如果您尝试使用字符串自己对此进行排序,这将非常痛苦。我建议您将字符串解析为日期(查看 JodaTime 以获得非常方便的日期/时间工具),然后使用 java.util.Collections.sort() 进行排序。

于 2013-02-26T09:39:50.070 回答
1

您可以使用 aComparator对列表进行排序。像这样的东西:

Collections.sort(aryListBean, new Comparator<RowItem>() {
    @Override
    public int compare(RowItem r1, RowItem r2) {
        // Place your compare logic here
    }
});
于 2013-02-26T09:48:25.993 回答
0

ArrayList 上有一个内置函数sort()。由于您使用的是字符串,因此这将起作用。

于 2013-02-26T09:37:23.557 回答
0

首先转换 Date 中的 String 并创建 arraylist。然后使用Collection sort 方法对arraylist 进行排序。

于 2013-02-26T09:42:43.433 回答