Ich habe eine Liste von Doubles in Java und möchte ArrayList in absteigender Reihenfolge sortieren.
Die EingabearrayList lautet wie folgt:
List<Double> testList = new ArrayList();
testList.add(0.5);
testList.add(0.2);
testList.add(0.9);
testList.add(0.1);
testList.add(0.1);
testList.add(0.1);
testList.add(0.54);
testList.add(0.71);
testList.add(0.71);
testList.add(0.71);
testList.add(0.92);
testList.add(0.12);
testList.add(0.65);
testList.add(0.34);
testList.add(0.62);
Die Ausgabe sollte so sein
0.92
0.9
0.71
0.71
0.71
0.65
0.62
0.54
0.5
0.34
0.2
0.12
0.1
0.1
0.1
java
sorting
arraylist
collections
Himanshu
quelle
quelle
Comparator
:)Double
s.reverse
aussehen, aber das Sortieren absteigend kann tatsächlich schneller sein als das Sortieren aufsteigend und dann rückwärts. Darüber hinaus würde die Verwendung einer List-Implementierung, dieComparator
als Konstruktorargument unterstützt (und somit unveränderlich bleibt), sicherstellen, dass die Liste jederzeit sortiert ist.Collections.sort
verwendetcompareTo
hinter den Kulissen.Collections.sort(list, Collections.reverseOrder());
. Abgesehen davon, dass die Verwendung des Komparators in umgekehrter Reihenfolge idiomatischer (und möglicherweise effizienter) ist, wird sichergestellt, dass die Sortierung stabil ist (was bedeutet, dass die Reihenfolge der Elemente nicht geändert wird, wenn sie gemäß dem Komparator gleich sind, wohingegen die Umkehrung die Reihenfolge ändert ).Absteigend:
quelle
CustomData
heißt ,List<AnotherModel>
dasAnotherModel
hatid
und ich zu sortieren will durchid
? Und ich greife einfach auf dasCustomData
Modell in meiner Klasse zu.Integer.compare(rhs.customInt, lhs.customInt);
Verwenden Sie die util-Methode der Klasse java.util.Collections , d. H.
Wenn Sie ein benutzerdefiniertes Objekt sortieren möchten, können Sie es sogar verwenden
siehe Sammlungen api
quelle
In Ihrem Beispiel zaubert dies in Java 8
Wenn Sie jedoch nach einigen Feldern des zu sortierenden Objekts sortieren möchten, können Sie dies ganz einfach tun, indem Sie:
oder
oder
Quellen: https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html
quelle
Wenn Sie Lambdas (Java8) verwenden und es auf die kleinste Syntax reduzieren (die JVM wird in diesem Fall viel ableiten ), erhalten Sie:
Eine ausführlichere Version:
Die Verwendung eines Lambda ist möglich, da die Comparator-Schnittstelle nur eine einzige Methode zu implementieren hat, sodass die VM ableiten kann, welche Methode implementiert wird. Da die Typen der Parameter abgeleitet werden können, müssen sie nicht angegeben werden (dh
(a, b)
statt(Double a, Double b)
. Und da der Lambda-Körper nur eine einzige Zeile hat und von der Methode erwartet wird, dass sie einen Wertreturn
zurückgibt, werden die und die geschweiften Klammern zurückgegeben sind nicht notwendig.quelle
Mit Java8 gibt es eine Standardsortiermethode auf der List-Oberfläche, mit der Sie die Sammlung sortieren können, wenn Sie einen Komparator bereitstellen. Sie können das Beispiel in der Frage einfach wie folgt sortieren:
Hinweis: Die Argumente im Lambda werden ausgetauscht, wenn sie an Double.compare übergeben werden, um sicherzustellen, dass die Sortierung absteigend ist
quelle
locationDetails.sort((locationDetailAsc,locationDetailsDsc) -> Long.compare(locationDetailsDsc.getSnapshot().getQuantity(), locationDetailAsc.getSnapshot().getQuantity()));
Sie können verwenden
Collections.sort(list)
zu sortieren ,list
wenn Ihrlist
enthältComparable
Elemente. Ansonsten würde ich Ihnen empfehlen, diese Schnittstelle wie hier zu implementieren:und natürlich bieten Sie Ihre eigene Realisierung der
compareTo
Methode wie hier:Und dann können Sie wieder verwenden,
Colection.sort(list)
da jetzt die Liste Objekte vom Typ Vergleichbar enthält und sortiert werden kann. Die Reihenfolge hängt von dercompareTo
Methode ab. Weitere Informationen finden Sie unter https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html .quelle
Collections.sort
Mit dieser Option können Sie eine Instanz von a übergeben,Comparator
die die Sortierlogik definiert. Anstatt die Liste in natürlicher Reihenfolge zu sortieren und dann umzukehren, kann man einfach zu übergebenCollections.reverseOrder()
,sort
um die Liste in umgekehrter Reihenfolge zu sortieren:Wie von @ Marco13 erwähnt, ist die Verwendung des Komparators in umgekehrter Reihenfolge nicht nur idiomatischer (und möglicherweise effizienter), sondern stellt auch sicher, dass die Sortierung stabil ist (was bedeutet, dass die Reihenfolge der Elemente nicht geändert wird, wenn sie gemäß dem Komparator gleich sind. wohingegen das Umkehren die Reihenfolge ändert)
quelle
quelle
Hier ist ein kurzes Cheatsheet, das typische Fälle abdeckt:
quelle
Wenn Sie Java SE 8 verwenden, kann dies hilfreich sein.
quelle
Collections.reverseOrder()
keine Argumente, was Ihre ImplementierungcompareDouble
überflüssig macht (es entspricht der natürlichen Reihenfolge vonDouble
s). Die Antwort hier sollte seinCollections.sort(testList, Collections.reverseOrder());
| * | Eine Liste sortieren:
| => Sort Asc Order:
| => Dsc-Reihenfolge sortieren:
| * | Kehren Sie die Reihenfolge der Liste um:
quelle
Sie können dies tun:
Collection verfügt über einen Standardkomparator, der Ihnen dabei helfen kann.
Wenn Sie einige neue Java 8-Funktionen verwenden möchten, können Sie Folgendes tun:
quelle
Zum Beispiel habe ich eine Klasse Person: String name, int age ==> Konstruktor new Person (Name, Alter)
quelle
if you want to short by name
->if you want to sort by name
In JAVA 8 ist es jetzt viel einfacher.
- Für den umgekehrten Gebrauch verwenden
quelle
Sie können so verwenden
quelle
Mit Eclipse Collections können Sie eine primitive Doppelliste erstellen, sortieren und dann umkehren, um sie in absteigender Reihenfolge anzuordnen. Dieser Ansatz würde das Boxen der Doppel vermeiden.
Wenn Sie eine möchten
List<Double>
, funktioniert Folgendes.Wenn Sie den Typ beibehalten möchten
ArrayList<Double>
, können Sie die Liste mithilfe derArrayListIterate
Dienstprogrammklasse wie folgt initialisieren und sortieren :Hinweis: Ich bin ein Committer für Eclipse-Sammlungen .
quelle
Die folgende Zeile sollte die Dicke tun
quelle