【问题标题】:Date Sorting ArrayList [duplicate]日期排序ArrayList [重复]
【发布时间】:2015-11-29 10:34:34
【问题描述】:

伙计们,我有一个奇怪的要求。我有一个Object,它由一个Date 引用组成,更好地称为endDate。除此之外,还有另一个称为status 的字符串字段,它选择像'Soon', 'Ended' and 'Closed' 这样的对象在一个ArrayList 中。

我想对此实施排序策略。

要应用的第一个排序基于经过的时间。我想对 EndDate 进行 First 排序,与现在最接近的差异应该排在第 1 位。即如果当前时间是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 类。 docs.oracle.com/javase/8/docs/api/java/util/Comparator.html。您可以将其与 Arrays.sort 一起使用
  • 既然状态字符串都是预先确定好的,为什么不使用枚举呢?
  • @Turtle 我写了一个比较器,但它很简单。它需要很长的时间表示,比较它们并返回排序。但是因为我希望列表中的经过时间超过 0,所以我提出了这个问题。对象排序的比较是相对于当前时间的。第二种是状态

标签: java sorting arraylist


【解决方案1】:

实现Comparator 并使其根据需要对您的项目进行排序。 compare(a,b) 方法将采用两个对象,您可以返回 -1、0 或 +1,具体取决于两个项目是相同的还是一个大于/小于另一个。

【讨论】:

    猜你喜欢
    • 2012-09-15
    • 2012-05-25
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多