This question already has answers here:
How to sort List of objects by some property
                                
                                    (12个答案)
                                
                        
                                4年前关闭。
            
                    
伙计们,我有一个奇怪的要求。我有一个Object,其中包含一个Date引用,更好地称为endDate。随之而来的是另一个名为status的String字段,该字段会选择类似'Soon', 'Ended' and 'Closed'的值。此类对象位于ArrayList中。

我想在此实施排序策略。

首先应用的排序是基于经过时间的。我想在EndDate上进行First排序,其差异最接近现在,应该排在第一位。也就是说,如果当前时间是Sep 3,2015 7:34 PM IST,并且存在一个endDateSep 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,具体取决于两项是相同的还是一项比另一项大/小。

10-02 12:21
查看更多