In jedem Beispiel, das ich finde, geht es darum, dies alphabetisch zu tun, während ich meine Elemente nach Datum sortieren muss.
Meine ArrayList enthält Objekte, für die eines der Datenmitglieder ein DateTime-Objekt ist. Auf DateTime kann ich folgende Funktionen aufrufen:
lt() // less-than
lteq() // less-than-or-equal-to
Zum Vergleich könnte ich so etwas tun wie:
if(myList.get(i).lt(myList.get(j))){
// ...
}
Was soll ich im if-Block tun?
Antworten:
Sie können Ihr Objekt vergleichbar machen:
Und dann sortieren Sie es, indem Sie anrufen:
Manchmal möchten Sie Ihr Modell jedoch nicht ändern, z. B. wenn Sie nach verschiedenen Eigenschaften sortieren möchten. In diesem Fall können Sie einen Komparator im laufenden Betrieb erstellen:
Dies funktioniert jedoch nur, wenn Sie sicher sind, dass dateTime zum Zeitpunkt des Vergleichs nicht null ist. Es ist ratsam, auch mit null umzugehen, um NullPointerExceptions zu vermeiden:
Oder im zweiten Beispiel:
quelle
Seit Java 8 bietet die List- Schnittstelle die Sortiermethode . In Kombination mit dem Lambda- Ausdruck wäre die einfachste Lösung
Umgekehrte Sortierung
Java 8 enthält auch einige praktische Methoden zum umgekehrten Sortieren.
quelle
list.sort(Comparator.comparing(o -> o.getDateTime()));
list.sort(Comparator.comparing(MyObject::getDateTime)
Sie können die Collections.sort-Methode verwenden. Es ist eine statische Methode. Sie übergeben ihm die Liste und einen Komparator. Es wird ein modifizierter Mergesort-Algorithmus für die Liste verwendet. Deshalb müssen Sie einen Komparator übergeben, um die Paarvergleiche durchzuführen.
Beachten Sie, dass Sie den Komparator weglassen können, wenn myList von einem vergleichbaren Typ ist (einer, der eine vergleichbare Schnittstelle implementiert) (wie Datum, Ganzzahl oder Zeichenfolge), und die natürliche Reihenfolge verwendet wird.
quelle
Die beste Antwort IMHO von Tunaki mit Java 8 Lambda
quelle
Wenn
MyObject
einDateTime
Mitglied einegetDateTime()
Methode hat, können Sie ein ElementArrayList
, dasMyObject
Elemente enthält , nach den folgendenDateTime
Objekten sortieren :quelle
So habe ich gelöst:
Hoffe es hilft dir.
quelle
Mit der Einführung von Java 1.8 sind Streams sehr nützlich, um diese Art von Problemen zu lösen:
quelle
Alle Antworten hier waren für ein einfaches Problem unnötig komplex (zumindest für einen erfahrenen Java-Entwickler, den ich nicht bin). Ich hatte ein ähnliches Problem und bin auf diese (und andere) Lösungen gestoßen, und obwohl sie einen Hinweis lieferten, fand ich sie für einen Anfänger wie oben angegeben. Meine Lösung hängt davon ab, wo im Objekt Ihr Datum ist. In diesem Fall ist das Datum das erste Element des Objekts [], wobei dataVector die ArrayList ist, die Ihre Objekte enthält.
quelle
DateTime
Objekts durch das OP, das in einem anderen Objekt enthalten ist. Wenn es nurDate
oderDateTime
Objekte waren,Comparable
gab es überhaupt keine Notwendigkeit für einComparator
.Dies mag eine alte Antwort sein, aber ich habe einige Beispiele aus diesem Beitrag verwendet, um einen Komparator zu erstellen, der eine Art
ArrayList
von sortiertHashMap<String, String>
ein Objekt nach einem in der Liste , dh dem Zeitstempel.Ich habe diese Objekte:
Die Kartenobjekte sind wie folgt:
Mit dieser Zuordnung lade ich alle meine Objekte mithilfe der
alList.add(map)
Funktion innerhalb einer Schleife in die Array-Liste .Jetzt habe ich meinen eigenen Komparator erstellt:
Ich kann jetzt einfach den Komparator jederzeit auf dem Array aufrufen und er sortiert mein Array, wobei ich den neuesten Zeitstempel an Position 0 (oben in der Liste) und den frühesten Zeitstempel am Ende der Liste erhalte. Neue Beiträge werden grundsätzlich an die Spitze gesetzt.
Dies kann jemandem helfen, weshalb ich es gepostet habe. Berücksichtigen Sie die return-Anweisungen in der Funktion compare (). Es gibt 3 Arten von Ergebnissen. Rückgabe von 0, wenn sie gleich sind, Rückgabe von> 0, wenn das erste Datum vor dem zweiten Datum liegt, und Rückgabe von <0, wenn das erste Datum nach dem zweiten Datum liegt. Wenn Sie möchten, dass Ihre Liste umgekehrt wird, wechseln Sie einfach diese beiden return-Anweisungen! Einfach =]
quelle
Übergeben Sie das Argument ArrayList In.
quelle
Verwenden Sie den folgenden Ansatz, um zu identifizieren, ob die Daten sortiert sind oder nicht
quelle
SimpleDateFormat
Klasse zu benutzen . Zumindest nicht als erste Option. Und das nicht ohne Vorbehalt. Heute haben wirjava.time
die moderne Java-API für Datum und Uhrzeit und ihreDateTimeFormatter
.Die Date-Klasse implementiert bereits die Comparator-Schnittstelle. Angenommen, Sie haben die folgende Klasse:
Angenommen, Sie haben eine Liste von A-Objekten
List<A> aList
, die Sie einfach mit der Stream-API von Java 8 sortieren können (Ausschnitt unten):quelle
Zukünftige Betrachter, ich denke, dies ist die einfachste Lösung. Wenn Ihr Modell ein Datum vom Typ Zeichenfolge enthält (z. B. "2020-01-01 10:00:00"), schreiben Sie einfach die folgende Zeile, um die Daten nach absteigendem Datum zu sortieren vom neuesten zum ältesten:
quelle