我有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);
}
答案 0 :(得分:12)
如果需要日期,请不要使用字符串。使用日期。您应该只在显示日期时将日期转换为字符串。否则,代码中的任何位置,日期都应为Date类型。这是允许按时间顺序排序的原因,因为日期具有按时间顺序排列的自然顺序。
因此,一旦RowItem
有startDate
和endDate
,两者都属于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());
}
答案 1 :(得分:3)
非常简单的答案:对于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());
}
}
Select是我的模型,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());
}
}
如果您希望列表为升序和降序,请不要忘记刷新列表视图
mListView.invalidateViews();
mAdapter.notifyDataSetChanged();
答案 2 :(得分:1)
如果您尝试使用字符串自行排序,这将非常痛苦。我建议你将String解析为Date(检查JodaTime以获得非常方便的Date / Time工具),然后使用java.util.Collections.sort()进行排序。
答案 3 :(得分:1)
您可以使用Comparator
对列表进行排序。像这样:
Collections.sort(aryListBean, new Comparator<RowItem>() {
@Override
public int compare(RowItem r1, RowItem r2) {
// Place your compare logic here
}
});
答案 4 :(得分:0)
ArrayList sort()
上有一个内置函数。由于您使用的是String,因此可以使用。
答案 5 :(得分:0)
首先在日期中转换String并创建arraylist。然后使用Collection排序方法对arraylist进行排序。