Wie kann ich eine ArrayList nach zwei Kriterien sortieren?
Folgendes Problem Leute,
ich arbeite an einem Programm, welches eine Huffmancode zu einer beliebigen Texteingabe erzeugt. Dazu speichere ich meine ganzen Zeichen die in dem Text kommen in einer ArrayList ab mit den Attributen Zeichen,Anzahl,Codierung. Nun möchte ich natürlich erstmal die ArrayList nach Anzahl der sortieren das habe ich schon hinbekommen. Jetzt würde ich gerne die ArrayList dazu noch alphabetisch sortieren. Das heißt, dass das erste Sortierkriterium die Häufigkeit des Zeichens ist und wenn 2 Zeichen genau gleich häufig sind, dann möchte ich das diese Zeichen alphabetisch aufgelistet werden. Gibt es da ne Möglichkeit in Java?
3 Antworten
Naja, was macht denn ein Komparator in Java? Der gibt -1 zurück, wenn der erste Parameter "kleiner" ist als der zweite, 0 wenn er gleich ist oder 1, wenn er größer ist.
Was größer oder kleiner bedeutet, kannst Du doch selbst bestimmen. Du könntest also sowas machen wie:
// Sortierung nach Häufigkeit, wenn diese eindeutig ist
if (a.häufigkeit < b.häufigkeit) return -1;
if (a.häufigkeit > b.häufigkeit) return 1;
// Falls gleiche Häufigkeit: Sortierung nach Alphabet
return a.zeichen.compareTo(b.zeichen);
https://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-property
https://stackoverflow.com/questions/6203411/comparing-strings-by-their-alphabetical-order
Einfach sowas wie das hier:
a.anzahl < b.anzahl ? -1 : a.anzahl > b.anzahl ? 1 : a.zeichen.compareTo(b.zeichen)