Autore Topic: Ordinare un arraylist di una listview  (Letto 4595 volte)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Ordinare un arraylist di una listview
« il: 14 Novembre 2010, 13:30:03 CET »
+3
Implementazione del suggerimento di Ricky su come ordinare una listview partendo dall'arraylist ([medio] ListView con layout personalizzato tramite un custom ArrayAdapter - Android Developers Italia).

ITEM_LIST è l'oggetto ArrayList<ITEM_CLASS>, che contiene oggetti della classe ITEM_CLASS, e l'ordinamento viene fatto sul campo NAME_FIELD di tipo String.

Codice (Java): [Seleziona]
   Comparator<ITEM_CLASS> comparator = new Comparator<ITEM_CLASS>() {
      @Override
      public int compare(ITEM_CLASS obj1,ITEM_CLASS obj2) {
         return obj1.NAME_FIELD.compareToIgnoreCase(obj2.NAME_FIELD);
      }
   };
   Collections.sort(ITEM_LIST,comparator);
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Ordinare un arraylist di una listview
« Risposta #1 il: 14 Novembre 2010, 13:57:21 CET »
0
Aggiungo che se la classe ITEM_CLASS implementa il metodo compareTo non è necessario definire un oggetto Comparator e si può utilizzare un overload di Collections.sort che accetta solo l'ArrayList.
Il comparatore diventa utile, se non indispensabile, se si necessita di diversi criteri di confronto.

Offline ROS

  • Utente normale
  • ***
  • Post: 196
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 10.04
Re:Ordinare un arraylist di una listview
« Risposta #2 il: 13 Settembre 2011, 15:49:46 CEST »
0
Modificando questo codice sarebbe possibile ordinare un ArrayList (al cui interno sono presenti vari HashMap) sulla base di un key => value dei vari hashmap?

Offline Matti111

  • Utente junior
  • **
  • Post: 68
  • Respect: +11
    • Mostra profilo
    • Ad Banners
  • Dispositivo Android:
    Nokia Lumia 800
  • Play Store ID:
    Ronca
  • Sistema operativo:
    Windows 7
Re:Ordinare un arraylist di una listview
« Risposta #3 il: 04 Gennaio 2012, 12:25:09 CET »
0
Ciao,
grazie innanzi tutto per il codice proposto, l'ho testato e funziona egregiamente.

Ho però un problema a questo punto: ordinando l'array per un campo numerico, non me li ordina correttamente. Ho questo ordinamento:

1
1
1
10
10
2
2
2
3
3
3

Praticamente me li ordina in ordine alfabetico. Come posso fare per ordinare i dati in ordine numerico?

Grazie
Mattia
Tutto quello che c'è da sapere sul mobile advertising
AdBanner

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Ordinare un arraylist di una listview
« Risposta #4 il: 04 Gennaio 2012, 12:27:23 CET »
0
Posta il codice :P

Offline Matti111

  • Utente junior
  • **
  • Post: 68
  • Respect: +11
    • Mostra profilo
    • Ad Banners
  • Dispositivo Android:
    Nokia Lumia 800
  • Play Store ID:
    Ronca
  • Sistema operativo:
    Windows 7
Re:Ordinare un arraylist di una listview
« Risposta #5 il: 04 Gennaio 2012, 12:36:13 CET »
0
che velocità :)

Codice: [Seleziona]
public class Biglietto {


        private String nome,prezzo,percentuale;
        public Biglietto (String nome,String prezzo, String percentuale) {
                super();
                this.nome = nome;
                this.prezzo = prezzo;
                this.percentuale = percentuale;
        }
        public String getNome() {
                return nome;
        }
        public String getPrezzo() {
                return prezzo;
        }
        public String getPercentuale() {
                return percentuale;
        }
       

}

e

Codice: [Seleziona]
Comparator<Biglietto> comparator_nome = new Comparator<Biglietto>() {
        public int compare(Biglietto obj1,Biglietto obj2) {
           return obj1.getNome().compareToIgnoreCase(obj2.getNome());
        }
     };
     Comparator<Biglietto> comparator_prezzo = new Comparator<Biglietto>() {
         public int compare(Biglietto obj1,Biglietto obj2) {
            return obj1.getPrezzo().compareToIgnoreCase(obj2.getPrezzo());
         }
      };
      Comparator<Biglietto> comparator_equo = new Comparator<Biglietto>() {
          public int compare(Biglietto obj1,Biglietto obj2) {
             return obj2.getPercentuale().compareToIgnoreCase(obj1.getPercentuale());
          }
      };

Quando chiamo comparator_prezzo mi ordina l'array nel modo descritto sopra. E guardando il come agisce compare è giusto che sia così: guardo la prima lettera se è uguale guardo la seconda e così via....mi servirebbe un metodo che permetta di ordinare degli interi e non delle stringhe.
Tutto quello che c'è da sapere sul mobile advertising
AdBanner

Zate

  • Visitatore
Re:Ordinare un arraylist di una listview
« Risposta #6 il: 04 Gennaio 2012, 12:41:11 CET »
0
Succede perché nome, prezzo e percentuale sono string. Penso che debbano essere integer se vuoi che vengano ordinati in ordine crescente
Scusa, non avevo letto l'intero post  :-[

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Ordinare un arraylist di una listview
« Risposta #7 il: 04 Gennaio 2012, 12:43:48 CET »
0
Basta convertire...

Codice (Java): [Seleziona]
Comparator<Biglietto> comparator_prezzo = new Comparator<Biglietto>() {
    public int compare(Biglietto obj1,Biglietto obj2) {
           int prezzo1 = Integer.parseInt(obj1.getPrezzo());
           int prezzo2 = Integer.parseInt(obj2.getPrezzo());
       return prezzo2 - prezzo1;
    }
 };

Offline Matti111

  • Utente junior
  • **
  • Post: 68
  • Respect: +11
    • Mostra profilo
    • Ad Banners
  • Dispositivo Android:
    Nokia Lumia 800
  • Play Store ID:
    Ronca
  • Sistema operativo:
    Windows 7
Re:Ordinare un arraylist di una listview
« Risposta #8 il: 04 Gennaio 2012, 16:54:43 CET »
0
Grazie mille!!!!

mi mancava il
Codice: [Seleziona]
return prezzo2 - prezzo1;, non ci avevo pensato :)

Thanks!
Tutto quello che c'è da sapere sul mobile advertising
AdBanner