This question already has answers here:
How to sort List of objects by some property
(12个答案)
4年前关闭。
伙计们,我有一个奇怪的要求。我有一个
我想在此实施排序策略。
首先应用的排序是基于经过时间的。我想在EndDate上进行First排序,其差异最接近现在,应该排在第一位。也就是说,如果当前时间是
其次是在
范例:
如果输入为
然后输出应该是
注意:此处使用的时间戳仅用于表示目的
代码:比较器内部的比较实现,时间戳记为GMT。
(12个答案)
4年前关闭。
伙计们,我有一个奇怪的要求。我有一个
Object
,其中包含一个Date
引用,更好地称为endDate
。随之而来的是另一个名为status
的String字段,该字段会选择类似'Soon', 'Ended' and 'Closed'
的值。此类对象位于ArrayList中。我想在此实施排序策略。
首先应用的排序是基于经过时间的。我想在EndDate上进行First排序,其差异最接近现在,应该排在第一位。也就是说,如果当前时间是
Sep 3,2015 7:34 PM IST
,并且存在一个endDate
为Sep 3,2015 7:36 PM IST
的对象。其次是在
status
上,应该首先显示所有带有soon
的对象的逻辑,然后是ended
的对象,然后是closed
。范例:
如果输入为
[0]( Sep 1,2015 10:36 PM IST ,ended)
[1]( Sep 3,2015 7:36 PM IST , soon )
[2]( Aug 29,2015 11:16 AM IST , closed)
[3]( Sep 7,2015 12:00 PM IST , soon )
[4]( Sep 1,2015 12:12 PM IST , ended)
然后输出应该是
[0]( Sep 3,2015 7:36 PM IST , soon)
[1]( Sep 7,2015 12:00 PM IST , soon)
[2]( Sep 1,2015 10:36 PM IST ,ended)
[3]( Sep 1,2015 12:12 PM IST , ended)
[4]( Aug 29,2015 11:16 AM IST , closed)
注意:此处使用的时间戳仅用于表示目的
代码:比较器内部的比较实现,时间戳记为GMT。
@Override
public int compare(JSONObject a, JSONObject b) {
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date currentdate = dateFormatLocal.parse( dateFormatGmt.format(new Date()));
} catch (ParseException e1) {
e1.printStackTrace();
}
try {
Date betEnds1 = dateFormatLocal.parse((String) a.get(KEY_NAME));
Date betEnds2 = dateFormatLocal.parse((String) b.get(KEY_NAME));
return betEnds1.compareTo(betEnds2);
}
catch (JSONException e) {
return -1;
} catch (ParseException e) {
return -1;
}
}
最佳答案
实施Comparator
并使其根据需要对项目进行排序。 compare(a,b)
方法将包含两个对象,您可以返回-1、0或+1,具体取决于两项是相同的还是一项比另一项大/小。