2017-02-17 2 views
0

Meine Listeandroid Art Arraylist nach einem obj Daten

ArrayList<MyList> list = new ArrayList<MyList>(); 
//  name - order - info 
list.add("Book ...", "1", "blah blah); 
list.add("Book ...", "10", "blah blah); 
list.add("Book ...", "11", "blah blah); 
list.add("Book ...", "2", "blah blah); 

Ich möchte die Liste sortieren nach ihrer Position in der 2 Sekunden obj

Dann habe ich versucht

Collections.sort(list); 

Liste Calss

public class MyList implements Comparable<MyList> { 

... 

    @Override 
    public int compareTo(@NonNull MyList content) { 
     return Integer.parseInt(content.getOrder()); 
    } 
} 

Antwort

1

Sie brauche ein Comparator hier.

Dieser vergleicht zwei Elemente und gibt -1, 0 oder 1 zurück; wenn der erste Eintrag kleiner, gleich, größer als der zweite ist.

Aber Sie sollten einen Schritt weiter gehen: Es scheint, als ob Sie versuchen, bestimmte Daten zu modellieren - dann verwenden Sie keine flache MyList-Liste-Klasse. Erstellen Sie eine Klasse, die wirklich Modelle Ihre Daten; vielleicht ein BookRecord; das hat Felder wie String name oder int id.

3

Sie können ein Comparator Objekt an die sort Methode übergeben.

Collections.sort(list, new Comparator<MyList>() { 
    @Override 
    public int compare(MyList m1, MyList m2) { 
     return m1.getOrder() - m2.getOrder(); 
    } 
}); 

Wenn Sie Java 8 verwenden, können Sie dies tun.

Collections.sort(list, (MyList m1, MyList m2) -> 
            m1.getOrder() - m2.getOrder())); 
+1

Schön! Auf diese Weise können Sie verschiedene Vergleiche in verschiedenen Situationen durchführen! Süss! –

1

Machen Sie Ihre compareTo Methode wie folgt aussehen:

public int compareTo(MyList o) { 
     return this.getOrder() - o.getOrder(); 
    } 
2
ArrayList<MyList> list = new ArrayList<MyList>(); 
    //  name - order - info 
    list.add("Book ...", "1", "blah blah); 
    list.add("Book ...", "10", "blah blah); 
    list.add("Book ...", "11", "blah blah); 
    list.add("Book ...", "2", "blah blah); 

    Collections.sort(list, new Comparator<MyList>() { 
     @Override 
     public int compare(MyList m1, MyList m2) { 
      return m1.getOrder() - m2.getOrder(); 
     } 
    }); 

jetzt überprüfen Sie Ihre Liste in aufsteigender Reihenfolge ist.