如何按字符串格式的升序和降序对日期的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
具有startDate
和endDate
,两者都是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进行排序。