web-dev-qa-db-fra.com

Comment trier la date dans l'ordre décroissant de la date Arraylist dans Android?

J'ai un ArrayList qui stocke Dates et je les ai triés par ordre décroissant. Maintenant, je veux les afficher dans un ListView. Voici ce que j'ai fait jusqu'à présent:

 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) {
            }

        });
11
crickpatel0024

Créez Arraylist<Date> De la classe Date. Et utilisez Collections.sort() pour l'ordre croissant.

Voir trier (liste <T> liste)

Trie la liste spécifiée dans l'ordre croissant, selon l'ordre naturel de ses éléments.

Pour le trier dans l'ordre décroissant Voir Collections.reverseOrder ()

Collections.sort(yourList, Collections.reverseOrder());
18
Sumit Singh

Ajoutez simplement comme ceci dans le cas 1: comme ceci

 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;

et mettre cette méthode à la fin de votre classe

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
    }
};
17
Jignesh Ansodariya

La date de comparaison de () que vous utilisez fonctionnera par ordre croissant.

Pour faire décroissant, inversez simplement la valeur de compareTo () qui sort. Vous pouvez utiliser une seule classe Comparator qui prend un indicateur/énumération dans le constructeur qui identifie l'ordre de tri

public int compare(MyObject lhs, MyObject rhs) {

    if(SortDirection.Ascending == m_sortDirection) {
        return lhs.MyDateTime.compareTo(rhs.MyDateTime);
    }

    return rhs.MyDateTime.compareTo(lhs.MyDateTime);
}

Vous devez appeler Collections.sort () pour trier réellement la liste.

En remarque, je ne sais pas pourquoi vous définissez votre carte dans votre boucle for. Je ne sais pas exactement ce que votre code essaie de faire, mais je suppose que vous voulez remplir les valeurs indexées de votre boucle for dans la carte.

10
Stealth Rabbi

Si la date au format chaîne le convertit au format date pour chaque objet:

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

Triez ensuite l'arraylist par ordre décroissant:

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

Date est Comparable alors créez simplement une liste de List<Date> et triez-la à l'aide de Collections.sort(). Et utilisez Collections.reverseOrder() pour obtenir le comparateur dans reverse ordering.

De Java Doc

Renvoie un comparateur qui impose l'ordre inverse du comparateur spécifié. Si le comparateur spécifié est nul, cette méthode est équivalente à reverseOrder () (en d'autres termes, elle renvoie un comparateur qui impose l'inverse de l'ordre naturel à une collection d'objets qui implémentent l'interface Comparable).

3
Amit Deshpande