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

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

ArrayList aryBeginDate; ArrayList 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() { @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()); } 

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

 Collections.sort(mArrayList, new OutcomeAscComparator()); public class OutcomeAscComparator implements Comparator 

Select是我的模型,For Descending:

 Collections.sort(mArrayList, new OutcomeDescComparator()); public class OutcomeDescComparator implements Comparator 

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

  mListView.invalidateViews(); mAdapter.notifyDataSetChanged(); 

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

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

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

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

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