我有一个存储ArrayList
的{{1}},我按降序排序。现在我想在Date
中显示它们。这就是我到目前为止所做的:
ListView
答案 0 :(得分:17)
创建Date类的Arraylist<Date>
。并使用Collections.sort()
升序。
根据元素的自然顺序,将指定列表按升序排序。
按降序排序请参阅Collections.reverseOrder()
Collections.sort(yourList, Collections.reverseOrder());
答案 1 :(得分:17)
在案例1中添加如下:像这样
case 0:
list = DBAdpter.requestUserData(assosiatetoken);
Collections.sort(list, byDate);
for (int i = 0; i < list.size(); i++) {
if (list.get(i).lastModifiedDate != null) {
lv.setAdapter(new MyListAdapter(
getApplicationContext(), list));
}
}
break;
并将此方法放在班级
的末尾static final Comparator<All_Request_data_dto> byDate = new Comparator<All_Request_data_dto>() {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
public int compare(All_Request_data_dto ord1, All_Request_data_dto ord2) {
Date d1 = null;
Date d2 = null;
try {
d1 = sdf.parse(ord1.lastModifiedDate);
d2 = sdf.parse(ord2.lastModifiedDate);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return (d1.getTime() > d2.getTime() ? -1 : 1); //descending
// return (d1.getTime() > d2.getTime() ? 1 : -1); //ascending
}
};
答案 2 :(得分:10)
您正在使用的日期compareTo()将用于升序。
要进行降序,只需反转compareTo()的值即可。您可以使用单个Comparator类,该类在构造函数中接收标识排序顺序的标志/枚举
public int compare(MyObject lhs, MyObject rhs) {
if(SortDirection.Ascending == m_sortDirection) {
return lhs.MyDateTime.compareTo(rhs.MyDateTime);
}
return rhs.MyDateTime.compareTo(lhs.MyDateTime);
}
您需要致电Collections.sort()对列表进行实际排序。
作为旁注,我不确定为什么要在for循环中定义地图。我不确定您的代码尝试做什么,但我假设您希望将for循环中的索引值填充到地图中。
答案 3 :(得分:9)
如果字符串格式的日期将其转换为每个对象的日期格式:
String argmodifiledDate = "2014-04-06 22:26:15";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try
{
this.modifiledDate = format.parse(argmodifiledDate);
}
catch (ParseException e)
{
e.printStackTrace();
}
然后按降序对arraylist进行排序:
ArrayList<Document> lstDocument= this.objDocument.getArlstDocuments();
Collections.sort(lstDocument, new Comparator<Document>() {
public int compare(Document o1, Document o2) {
if (o1.getModifiledDate() == null || o2.getModifiledDate() == null)
return 0;
return o2.getModifiledDate().compareTo(o1.getModifiledDate());
}
});
答案 4 :(得分:3)
Date
为Comparable
,因此只需创建List<Date>
列表并使用Collections.sort()
对其进行排序。并使用Collections.reverseOrder()
在reverse ordering
中获取比较器。
来自Java Doc
返回一个比较器,它强制指定比较器的反向排序。如果指定的比较器为null,则此方法等效于reverseOrder()(换句话说,它返回一个比较器,该比较器对实现Comparable接口的对象集合施加自然排序的反转)。
答案 5 :(得分:1)
更容易替代上述答案
如果Object(Model Class / POJO)包含日期为String 的数据类型。
private void sortArray(ArrayList<myObject> arraylist) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); //your own date format
if (reports != null) {
Collections.sort(arraylist, new Comparator<myObject>() {
@Override
public int compare(myObject o1, myObject o2) {
try {
return simpleDateFormat.parse(o2.getCreated_at()).compareTo(simpleDateFormat.parse(o1.getCreated_at()));
} catch (ParseException e) {
e.printStackTrace();
return 0;
}
}
});
}
如果对象(模型类/ POJO)在数据类型中包含日期
private void sortArray(ArrayList<myObject> arrayList) {
if (arrayList != null) {
Collections.sort(arrayList, new Comparator<myObject>() {
@Override
public int compare(myObject o1, myObject o2) {
return o2.getCreated_at().compareTo(o1.getCreated_at()); }
});
} }
以上代码用于按日期的降序对数组进行排序, 将o1和o2交换为升序。