Ich habe eine Liste von Objekten und möchte diese in einer definierten Reihenfolge sortieren. Zum Bsp. Ich habe ein Objekt mit einem Feld String color
. Ich möchte meine Liste auf dem Farbfeld so sortieren, dass sie immer zuerst weiß als blau dann gelb hat und dann alle anderen (wenn möglich alphanumerisch geordnet aber nicht nötig):
Before sorting: After sorting:
orange white
white blue
green yellow
brown orange
yellow black
black brown
... ...
Gibt es dafür eine (einfache) Möglichkeit?
BEARBEITEN:
Ich muss eine Komplikation mehr hinzufügen... Was ist, wenn es mehr Farben mit demselben Namen/Radix geben kann? Zum Bsp. whiteX, whiteY, whiteZ, blueA, blueB,... Alle Weißen müssen zuerst kommen, dann alle Blauen, dann alle Gelben und dann alle anderen. Kann man das noch mit einem Komparator lösen? (Ich kann mir nicht vorstellen, wie...)
Lösung des Problems
Eine andere Lösung besteht darin, Enumerationen mit Ihrem Komparator zu verwenden, da für Enumerationen bereits ein Index definiert ist ( ordinal ).
Erstellen Sie zunächst eine Aufzählung mit Ihren Werten in der Reihenfolge, in der sie sortiert werden sollen.
enum class MyColour {
WHITE,
BLUE,
YELLOW,
ORANGE,
BLACK,
BROWN
}
Für jedes Objekt können Sie den Aufzählungswert mit erhalten Mycolour.valueOf("WHITE")
. Hinweis: Hierbei wird zwischen Groß- und Kleinschreibung unterschieden.
Als nächstes können Sie einfach Ihren Komparator verwenden.
val sortedList = list.sortedBy { it.colour } // colour being the enum value we defined.
Keine Kommentare:
Kommentar veröffentlichen