Gewusst wie: Sortieren einer Liste von vorhandenen Eigenschaften
Ich bin mit dieser Linie hier, um zu Sortieren, eine Liste auf der Basis des Objekt-Namen.
g.V.sort{it.name}
Wie kann ich es Sortieren basiert auf "name", wenn es vorhanden ist, wenn nicht, ich will Art, die es durch "title". Wenn beide existieren, will ich erstmal " Sortieren nach "name" und dann "Titel".
Ich bin nicht eine Groovy-Programmierer, also danke für die Hilfe im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, ich verstehe Ihre Frage richtig. Vielleicht so etwas wie dies ist, was Sie suchen:
Was im Innern passiert, die scheinbar unschuldige Vergleich-Funktion ist eigentlich eine ganze Menge von Groovy-syntax Magie. Aber es ist nicht allzu schwer zu Folgen.
Erste, der
Sortieren
Methode wird aufgerufen, mit einer binären Funktion, fungiert als Komparator (d.h. nimmt zwei Argumenten, a und b und gibt -1 zurück, wenn a < b, 1, wenn a > b und 0, wenn a == b).Diese anonyme Funktion:
{ a, b -> a.name <=> b.name ?: a.title <=> b.title }
verwendet die "Raumschiff-operator" (<=>
... das ist ein Raumschiff, Mann!) zuerst vergleichen a und b die Namen.Wenn die Namen gleich sind (oder beide null), dann das Ergebnis
a.name <=> b.name
0 ist, wertet die fälschlicherweise in die "Elvis-operator" (?:
... vorstellen, dass es wie ein smiley), so wird das Ergebnis dera.title <=> b.title
zurückgegeben.Andernfalls, wenn das Ergebnis den Namen Vergleich nicht 0 ist, dann wertet wahrheitsgemäß in der Elvis-operator und dieser Wert wird zurückgegeben.
Dies ist alles unter der Berücksichtigung, dass Sie vergleichen können, die null-Werte mit strings und dass
'any string' > null
immer hält (das ist das gleiche wie zu sagen, dass'any string' <=> null == 1
).Sodass das Endergebnis ist, dass Elemente, die keine Namen sind die ersten und sortiert Sie nach Titel, und dann die Elemente mit Namen und Titel sind sortiert zuerst nach Namen und dann nach Titel.
Ich hoffe das war, was Sie gesucht haben. Wenn Sie erwarten, wurden eine andere Reihenfolge der sortierten Elemente fühlen Sie sich frei, um zu verdeutlichen, dass es in die Kommentare 🙂
Update
Gibt es auch eine nicht sehr dokumentiert
OrderBy
- Objekt, das verwendet werden kann, in diesem Fall:name
Eigenschaft, aber die Frage sagt "Sortieren, es basiert auf "name" falls vorhanden"Können Sie sortiert die Sammlung mit einem
Comparator
.Dies ist mein völlig ungetestet Aufwand das ist wahrscheinlich gespickt mit bugs