Um eine Liste in Java zu sortieren, kann man auf die Methode Collections.sort() zurückgreifen. Bei Standard-Datentypen reicht es die Liste dieser Funktion zu übergeben. Bei eigenen Datentypen dagegen muss angegeben werden, wie man diesen vergleichen kann.
Ich hab hier beispielsweise eine Klasse erstellt, die ich in einer Liste sortieren will. Sie besteht aus einem int und einem String, die in einem Konstruktor zugewiesen werden und mittels von get()-Methoden ausgelesen werden können.
public class MyType { private int size; private String name; public MyType(int size, String name) { this.size = size; this.name = name; } public int getSize() { return this.size; } public String getName() { return this.name; } }
Um anzugeben wie man den Datentyp vergleichen will, wird ein Comparator benötigt. Dazu lege ich in der Datentyp-Klasse eine static-Methode an, welche einen Solchen zurückgibt.
public static Comparator<MyType> getMyTypeComparator() { return new Comparator<MyType>() { public int compare(MyType first, MyType second) { int result = Integer.compare(first.getSize(), second.getSize()); if (result == 0) { result = first.getName().compareTo(second.getName()); } return result; } }; }
Dieser Comparator enthält eine compare()-Methode, welche angibt wie ich sortieren will. In diesem Fall lege ich fest, dass erst nach size sortiert werden soll und für den Fall, dass size bei mehreren Objekten gleich ist, wird danach noch alphabetisch nach dem Namen sortiert.
Nach dem folgenden Aufruf ist die Liste myTypeList, welche zuvor angelegt wurde, sortiert:
Collections.sort(myTypeList, MyType.getMyTypeComparator());