Come Ordinare per Data in ordine decrescente Da Arraylist Data in android?

Ho un ArrayList che memorizza Dates e ho ordinati in ordine decrescente. Ora voglio visualizzare in un ListView. Questo è quello che ho fatto finora:

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

        });



5 Replies
  1. 17

    Creare Arraylist<Date> di una Data classe. E utilizzare Collections.sort() per ordine crescente.

    Vedere sort(List<T> elenco)

    Ordina l’elenco specificato in ordine crescente, secondo l’ordinamento naturale dei suoi elementi.

    Per Ordinare in ordine decrescente Vedere Collezioni.reverseOrder()

    Collections.sort(yourList, Collections.reverseOrder());
    • Per impostazione predefinita Collezione.sort ordina in ordine decrescente
    • vedi la risposta sopra, o andare a javadoc per ulteriori dettagli.
    • Questo funziona @SumitSingh…non so perché il suo downvoted !
    • sì, anche io non so. ma grazie 🙂
  2. 17

    Solo aggiungere, come in questo caso 1: come questo

     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;

    e mettere questo metodo alla fine della 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
        }
    };
    • Ho errore nel qui sotto:Bound mismatch
    • importare i pacchetti import java.util.Collezioni; import java.util.Data;
    • Generico metodo sort(List<T> questo tipo di Collezioni non è applicabile per gli argomenti (ArrayList<All_Request_data_dto>).
    • Il tipo derivato All_Request_data_dto non è un valido sostituto per il delimitata parametro <T extends Comparable<? super T>>
    • si prega di attendere 1 min si prega di mettere il DTO classe qui
    • public class All_Request_data_dto { String requestId; String projectId; String tableId; String projectName; String displayId; String issueId; String titolo; String stato; String lastModifiedDate; String lastModifier; String lastStateChanger; String proprietario; String submitDate; String submitter; String sort_submit_date; }
    • e qual è la tua data di formiato in lastModifiedDate ?
    • “MM/dd/yyyy hh:mm:ss a”
    • Grazie Jignesh !!!! Il Codice a……….!!!!!!
    • questa è la linea core solo ritorno (d1.getTime() > d2.getTime() ? -1 : 1);

  3. 10

    Data compareTo() si utilizza di lavoro per ordine crescente.

    Da fare in discesa, è sufficiente invertire il valore di compareTo() coming out. È possibile utilizzare un unico Comparatore di classe che ha in una bandiera/enum nel costruttore che identifica il tipo di ordinamento

    public int compare(MyObject lhs, MyObject rhs) {
    
        if(SortDirection.Ascending == m_sortDirection) {
            return lhs.MyDateTime.compareTo(rhs.MyDateTime);
        }
    
        return rhs.MyDateTime.compareTo(lhs.MyDateTime);
    }

    È necessario chiamare Collezioni.sort() effettivamente ordinare l’elenco.

    Come nota a margine, io non sono sicuro del perché si sta definendo la mappa all’interno del vostro ciclo for. Io non sono esattamente sicuro di quello che il codice sta cercando di fare, ma suppongo che si desidera inserire i valori indicizzati dal tuo ciclo for per la mappa.

    • Il “!” non funzionerà, in quanto compareTo restituisce un int, per invertire il valore, o si cambia l’ordine degli oggetti, oppure utilizzare: Collezioni.sort(list, Collezioni.reverseOrder(comparatore));
    • ottimo punto! Ho modificato la mia risposta per includere invertendo l’ordine nel metodo compare()
  4. 9

    Se la data in formato stringa convertire il formato di data per ogni oggetto :

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

    Quindi ordinare l’arraylist in ordine decrescente :

    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());
                  }
                });
    • Perfettamente risolto il mio problema 🙂
  5. 3

    Data è Paragonabile quindi basta creare una lista di List<Date> e ordinare utilizzando Collections.sort(). E utilizzare Collezioni.reverseOrder() per ottenere il comparatore in reverse ordering.

    Da Java Doc

    Restituisce un comparatore, che impone l’ordinamento inverso a quello specificato comparatore. Se specificato comparatore è nullo, questo metodo è equivalente a reverseOrder() (in altre parole, restituisce un comparatore, che impone l’inversione dell’ordine naturale su una collezione di oggetti che implementano l’interfaccia Comparable).

Lascia un commento