繁体   English   中英

如何在 android 中从 Arraylist 日期按降序对日期进行排序?

[英]How to Sort Date in descending order From Arraylist Date in android?

我有一个存储DateArrayList ,我按降序对它们进行排序。 现在我想在ListView中显示它们。 这是我到目前为止所做的:

 spndata.setOnItemSelectedListener(new OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int position, long arg3) {

                switch (position) {
                case 0:
                    list = DBAdpter.requestUserData(assosiatetoken);
                    for (int i = 0; i < list.size(); i++) {
                        if (list.get(i).lastModifiedDate != null) {
                            lv.setAdapter(new MyListAdapter(
                                    getApplicationContext(), list));
                        }
                    }
                    break;
                case 1:
                    list = DBAdpter.requestUserData(assosiatetoken);

                    Calendar c = Calendar.getInstance();
                    SimpleDateFormat df3 = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");    
                    String formattedDate3 = df3.format(c.getTime());                        
                    Log.v("log_tag", "Date  " + formattedDate3);

                    for (int i = 0; i < list.size(); i++) {                         
                        if (list.get(i).submitDate != null) {                               
                            String sDate = list.get(i).submitDate;                              
                            SimpleDateFormat df4 = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");    
                            String formattedDate4 = df4.format(sDate);

                            Map<Date, Integer> dateMap = new TreeMap<Date, Integer>(new Comparator<Date>(){  
                                 public int compare(Date formattedDate3, Date formattedDate4) {
                                     return formattedDate3.compareTo(formattedDate4);
                                 }
                            });
                            lv.setAdapter(new MyListAdapter(
                                    getApplicationContext(), list));
                        }
                    }
                    break;
                case 2:

                    break;

                case 3:

                    break;

                default:
                    break;
                }

            }

            public void onNothingSelected(AdapterView<?> arg0) {
            }

        });

创建 Date 类的Arraylist<Date> 并使用Collections.sort()进行升序排列。

排序(列表<T>列表)

根据其元素的自然顺序,将指定的列表按升序排序。

要按降序排序,请参见Collections.reverseOrder()

Collections.sort(yourList, Collections.reverseOrder());

只需在情况 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
    }
};

您正在使用的日期的 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 循环中的索引值填充到地图中。

如果字符串格式的日期将其转换为每个对象的日期格式:

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());
              }
            });

DateComparable所以只需创建List<Date>并使用Collections.sort()对其进行排序。 并使用Collections.reverseOrder()reverse ordering获取比较器。

来自 Java 文档

返回一个比较器,该比较器强加指定比较器的反向排序。 如果指定的比较器为 null,则此方法等效于 reverseOrder()(换句话说,它返回一个比较器,该比较器对实现 Comparable 接口的对象集合施加自然顺序的反转)。

更容易替代上述答案

  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; } } }); }
  2. 如果对象(模型类/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 交换为升序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM