Kotlin-Objekt-Ausdrücke: Komparator Beispiel
Dieser code im Grunde sortiert das array in absteigender Reihenfolge:
val arrayList = arrayListOf(1, 5, 2)
Collections.sort(arrayList, object : Comparator<Int> {
override fun compare(x : Int, y: Int) = y - x
})
Wie in der Welt tut, das überschreiben der Methode vergleichen mit y - x
funktioniert? Wie funktioniert Kotlin wissen, was y - x
Mittel, um y
vor x
wenn y < x
?
- Siehe auch stackoverflow.com/questions/33640864/... zum Beispiel kotlin Sortier-Helfer in der stdlib.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese hat eigentlich nichts mit Kotlin. Es ist im Zusammenhang mit der Java-API-Comparator-interface, und wie Sammlungen.Sortieren verwendet.
Vom die Dokumentation:
Lassen Sie uns nun versuchen, diese für die Argumente, die Sie Gaben:
Collections.sort
weiß nichts über das, was y - x bedeutet. Es ist einfach respektiert die angegebenen Vertrag der Komparator-Schnittstelle, die jede Implementierung muss auch Respekt (wenn er arbeiten will).Es ist einfach so passiert, dass
y - x
ist eine Implementierung, die nicht respektieren, dass der Vertrag, weil Math.y - x
ist nicht eine Implementierung, die tut, Respekt, Vertrag. Zumindest nicht in den Allgemeinen Fall, wo integer-überlauf führen kann zu undefiniertem Verhalten. (Für positive zahlen, das es funktioniert, aber.)Seit Komparator ist ein SAM-Oberfläche können Sie schreiben, dieser code kompakter mit einem lambda:
Oder sogar
da die lambda ist der Letzte parameter der
sort
Funktion und den Datentypx
undy
abgeleitet werden kann.Dass zwei Objekte und zu definieren, die eine einzelne Ganzzahl für Sie ist eine Abstraktion, der eine Art definition. Sie grundsätzlich festlegen, in welcher Reihenfolge diese Elemente wäre layed heraus, wenn Sie sortiert sind.
Für die Sortierung von ganzen zahlen es könnte scheinen, wie ein overkill, aber in Betracht zu Sortieren komplexer Objekte, beispielsweise Instanzen einer Klasse
Car
.Diese Klasse hat einen
colorCode
und nach der Sie Sortieren möchten, dass:Ist, wie würden Sie definieren eine Reihenfolge für die Objekte in einer abstrakten Art und Weise.
In Kotlin Sie können Sie auch Sortieren Elemente mithilfe der kotlin-Sammlungen Erweiterung der Funktionen Sortieren, sortiert, sortBy .... etc
oder