ArrayList sortieren

MichaelKl

Mitglied
Habe Daten von Personen in einer ArrayList gespeichert.

Java:
public class Person implements Comparable{

private String name;
private int alter;
private int anzahlKinder;

@Override
 public int compareTo(Object anotherPerson) throws ClassCastException {
    if (!(anotherPerson instanceof Person))
      throw new ClassCastException("A Person object expected.");
    int anotherPersonAge = ((Person) anotherPerson).getAlter();  
    return this.Alter - anotherPersonAge;    
  }
}

Die überschriebene Methode kommt aus diesem Tutorial (Making Java Objects Comparable - O'Reilly Media).

Jetzt möchte ich die Personen aber nicht nur nach dem Alter Sortieren sondern

1. Nach Alter
2. nach anzahlKinder

also an erster Stelle steht der/die Älteste mit den meisten Kindern und an letzter der/die Jüngst mit den wenigstens Kinder.

Wie kann ich das umsetzen bzw. erweitern?

Danke schon mal
 
Entweder du gibts einen Comparator(PersonAgeComparator, PersonsChildAgeComporator...) mit an wenn du sortieren willst oder du änderst deine jetzige Funktion und fügst einen Vergleich der Kinder hinzu.
 
Java:
public class Person implements Comparable<Person> {

    private String name;
    private int alter;
    private int anzahlKinder;
 
    @Override
    public int compareTo(Person other) throws ClassCastException {
        if (this == other) {
            return 0;
        }
        if (other == null) {
            return -1;
        }
        int altersDifferenz = this.getAlter() - other.getAlter();
        if (altersDifferenz != 0) {
            return altersDifferenz;
        }
        return this.getAnzahlKinder() - other.getAnzahlKinder();
    }
}
so würde das funktionieren.
 
Soweit ich das sehe, ist aber keine Staffelung vorhanden.

Erste Sortierkriterium soll das Alter sein
wenn das alter gleich ist, dann die anzahl kinder
und wenn die anzahl der kinder gleich ist, kommt das Gehalt ....

aber das ganze sollte funktionieren, wenn die if-Abfrage ineinander verschachtelt wird....

// vll etwas dumme Frage:
Was ist dann der Sinn von SortedLists.... ?
 
Soweit ich das sehe, ist aber keine Staffelung vorhanden.

Erste Sortierkriterium soll das Alter sein
wenn das alter gleich ist, dann die anzahl kinder
und wenn die anzahl der kinder gleich ist, kommt das Gehalt ....

aber das ganze sollte funktionieren, wenn die if-Abfrage ineinander verschachtelt wird....

// vll etwas dumme Frage:
Was ist dann der Sinn von SortedLists.... ?
stop.. hier sind ein paar begrifflichkeiten voellig falsch.

SortedList / SortedSet heisst, dass die Objekte in ihrer natuerlichen Ordnung vorhanden sind. Bei Zahlen ist es der Zahlenwert, bei Strings das Alphabet.

Wenn du ein eigenes Objekt hast musst du angeben, was die Ordnung ist. Dies geschieht ueber Comparable bzw einen Comparator.

Faetz antwort oben ist schon genau das was du willst. Wenn das Alter ungleich ist, wird das als Kriterium genommen. Ist es gleich, wird das naechste Kriterium angeschaut.

Einen generellen Ansatz nach dem Motto "solange ein Attribut gleich ist nehm das naechste" gibt es nicht...

du koenntest dir auch das Ordering konzept von den google collections (zb siehe Introduction to Google Collections | Benjamin Winterberg) anschauen, aber das denk ich ist noch zu weit fuer dich...
 

Neue Themen


Zurück
Oben