繁体   English   中英

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

[英]How to Sort an Arraylist of Date in ascending and descending order which is in String format

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

}

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

因此,一旦RowItem具有startDateendDate ,两者都是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());
}

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

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

选择是我的模型,For Descending:

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

如果您希望列表为AScending和Descending,请不要忘记刷新列表视图

                mListView.invalidateViews();

                mAdapter.notifyDataSetChanged();

如果您尝试使用字符串自行排序,这将非常痛苦。 我建议你将String解析为Date(检查JodaTime以获得非常方便的Date / Time工具),然后使用java.util.Collections.sort()进行排序。

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

Collections.sort(aryListBean, new Comparator<RowItem>() {
    @Override
    public int compare(RowItem r1, RowItem r2) {
        // Place your compare logic here
    }
});

在ArrayList sort()上有一个内置函数。 由于您使用的是String,因此可以使用。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM