Ich möchte eine Sortierdemo für die Fahrzeugliste entwickeln. Ich verwende eine Datentabelle, um die Fahrzeugliste anzuzeigen. Eigentlich möchte ich die Liste nach Autofarbe sortieren. Hier ist es nicht nach alphabetischer Reihenfolge sortiert. Ich möchte meine benutzerdefinierte Sortierreihenfolge verwenden, z. B. rotes Auto zuerst, dann blaues usw.
Dafür versuche ich Java zu verwenden Comparator
und Comparable
es erlaubt aber nur in alphabetischer Reihenfolge zu sortieren.
Kann mir jemand den Weg weisen, die zu verwendende Technik zu implementieren, damit die Sortierung schneller wird?
class Car implements Comparable<Car>
{
private String name;
private String color;
public Car(String name, String color){
this.name = name;
this.color = color;
}
//Implement the natural order for this class
public int compareTo(Car c) {
return name.compareTo(c.name);
}
static class ColorComparator implements Comparator<Car> {
public int compare(Car c1, Car c2) {
String a1 = c1.color;
String a2 = c2.color;
return a1.compareTo(a2);
}
}
public static void main(String[] args) {
List<Car> carList = new ArrayList<>();
List<String> sortOrder = new ArrayList<>();
carList.add(new Car("Ford","Silver"));
carList.add(new Car("Tes","Blue"));
carList.add(new Car("Honda","Magenta"));
sortOrder.add("Silver");
sortOrder.add("Magenta");
sortOrder.add("Blue");
// Now here I am confuse how to implement my custom sort
}
}
enum
Werte ist die Reihenfolge, in der ihre Werte definiert werden.Wie wäre es damit:
Grundsätzlich stimme ich zu, dass die Verwendung von ein
enum
noch besserer Ansatz ist, aber diese Version ist flexibler, da Sie damit verschiedene Sortierreihenfolgen definieren können.Aktualisieren
Guava hat diese Funktionalität in seine
Ordering
Klasse integriert:Diese Version ist etwas weniger ausführlich.
Erneut aktualisieren
Java 8 macht den Komparator noch weniger ausführlich:
quelle
Komparator in Reihe ...
quelle
Ich denke, das kann wie folgt gemacht werden:
Verwenden Sie zum Sortieren Folgendes:
quelle
Ich musste etwas Ähnliches tun wie Sean und Ilalex.
Ich hatte jedoch zu viele Optionen, um die Sortierreihenfolge explizit zu definieren, und musste nur bestimmte Einträge in der angegebenen (nicht natürlichen) Reihenfolge an den Anfang der Liste setzen.
Hoffentlich ist dies für jemand anderen hilfreich.
quelle
In Java 8 können Sie Folgendes tun:
Sie benötigen zuerst eine Aufzählung:
Fahrzeugklasse:
Und dann können Sie mithilfe Ihrer Fahrzeugliste einfach Folgendes tun:
quelle
Definieren Sie einen Aufzählungstyp als
Ändern Sie den Datentyp von
color
vonString
inColors
Ändern Sie den Rückgabetyp und den Argumenttyp des Getter und die Setter-Farbmethode inColors
Definieren Sie den Komparatortyp wie folgt
Rufen Sie nach dem Hinzufügen von Elementen zur Liste die Sortiermethode der Sammlung auf, indem Sie Listen- und Vergleichsobjekte als Argumente übergeben
dh
Collections.sort(carList, new ColorComparator());
dann drucken mitListIterator
.Die Implementierung der vollständigen Klasse ist wie folgt:
quelle
Ich werde so etwas tun:
Alle Credits gehen an @Sean Patrick Floyd :)
quelle
Mit einfachen Schleifen:
Und Sortierreihenfolge in Liste
quelle