So sortieren Sie eine Liste & lt; Objekt & gt; alphabetisch mit dem Objektnamenfeld
Habe ich eine Liste von Objekten, wie List<Object> p
.Ich möchte Sortieren Sie die Liste alphabetisch mit dem Objekt-Namen-Feld. Objekt enthält Feld 10 und Feld name, ist einer von Ihnen.
if (list.size() > 0) {
Collections.sort(list, new Comparator<Campaign>() {
@Override
public int compare(final Object object1, final Object object2) {
return String.compare(object1.getName(), object2.getName());
}
} );
}
Aber es gibt nichts wie String.vergleichen..?
Kommentar zu dem Problem - Öffnen
Wie soll man denn den Namen? --
Object
s haben keine Namen. Meinst du mit .toString()
? Kommentarautor: Matt FenwickObjekt1
und objekt2
müssen vom Typ Kampagne
, und die compare-Funktion Objekt1.getName().compareTo(objekt2.getName())
. Kommentarautor: Bart van HeukelomMischen Sie
List<Objekt>
und Komparator<Campaign>
. Das kannst du nicht tun. Entweder Sie haben List<Objekt>
und Komparator<Objekt>
oder List<Campaign>
und Komparator<Campaign>
Kommentarautor: viktorInformationsquelleAutor der Frage Saurabh Kumar | 2011-12-08
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus dem code, es sieht aus wie Ihre
Comparator
ist bereits parametrisiert mitCampaign
. Dies funktioniert nur mitList<Campaign>
. Auch die Methode, die Sie suchencompareTo
.Oder wenn Sie mit Java 1.8
Eine Letzte Bemerkung-es gibt keinen Punkt bei der überprüfung der Liste Größe. Art der Arbeit auf eine leere Liste.
InformationsquelleAutor der Antwort Robert B
Die richtige Art und Weise, alphabetisch zu Sortieren strings ist die Verwendung
Collator
, weil der Internationalisierung. Einige Sprachen haben unterschiedliche um durch wenige zusätzliche Zeichen, etc.Wenn Sie kümmern sich nicht um die Internationalisierung verwenden
string.compare(otherString)
.InformationsquelleAutor der Antwort viktor
Haben Sie einen Blick auf
Collections.sort()
und dieComparator
- Schnittstelle.String-Vergleich durchgeführt werden kann mit
object1.getName().compareTo(object2.getName())
oderobject2.getName().compareTo(object1.getName())
(abhängig von der Sortierreihenfolge, die Sie wünschen).Wenn Sie möchten, dass die Art auf den Fall Agnostikerin, tun
object1.getName().toUpperCase().compareTo(object2.getName().toUpperCase())
.InformationsquelleAutor der Antwort tobiasbayer
Bitte ersetzen Sie das Objekt mit der Klasse enthält Feld name
Verwendung:
InformationsquelleAutor der Antwort Jan Vorcak
etwas wie
InformationsquelleAutor der Antwort BRFennPocock
Hier ist eine version von Robert B ' s Antwort, das funktioniert für
List<T>
und Sortierung nach einer angegebenen Zeichenfolge-Eigenschaft des Objekts mit der Spiegelung und keine 3rd-party-BibliothekenInformationsquelleAutor der Antwort che javara
Können Sie
sortThisBy()
aus Eclipse-Sammlungen:Wenn Sie können nicht ändern die Art der Liste aus
List
:Hinweis: ich bin ein Beitrag zu Eclipse Sammlungen.
InformationsquelleAutor der Antwort Nikhil Nanivadekar
Wenn Ihr Objekte hat einige gemeinsame Ahnen [lassen Sie es
T
] die Sie verwenden solltenList<T>
stattList<Object>
und Umsetzung einer Komparator für dieses T mit dem Feld name.Wenn Sie nicht einen gemeinsamen Vorfahren haben, implementieren Sie einen Comperator, und verwenden Sie Reflexion zum extrahieren der Namen, Beachten Sie, dass es unsicher ist, unsuggested, und leidet unter schlechten Leistung reflektion verwenden, aber es ermöglicht Ihnen den Zugriff auf ein Feld name, ohne etwas über die tatsächliche Typ des Objekts [neben der Tatsache, dass es hat ein Feld mit dem entsprechenden Namen]
In beiden Fällen sollten Sie Sammlungen.sort() zu Sortieren.
InformationsquelleAutor der Antwort amit
Dies ist unter der Annahme einer Liste der
YourClass
stattObject
wie bereits erläutert, durch amit.Können Sie dieses bit von der Google Guava-Bibliothek:
Den anderen Antworten, die Erwähnung
Comparator
sind nicht falsch, daOrdering
implementiertComparator
. Diese Lösung ist, meiner Meinung nach, ein wenig leichter, obwohl es kann schwieriger sein, wenn Sie ein Anfänger sind und nicht verwendet werden, um die Verwendung von Bibliotheken und/oder "funktionale Programmierung".Kopiert schamlos von diese Antwort auf meine eigene Frage.
InformationsquelleAutor der Antwort Bart van Heukelom
Durch Auswahl Sortieren
InformationsquelleAutor der Antwort Shizumaru18
Wenn Sie eine
List<Object>
zu halten Objekte eines Subtyps mit einem name-Feld (nennen wir den SubtypNamedObject
), müssen Sie niedergeschlagen die Liste Elemente, um Zugriff auf die Namen. Sie haben 3 Optionen, von denen die besten der ersten:List<Object>
in Erster Linie, wenn Sie Ihr helfen können - halten Sie Ihr benannte Objekte in einemList<NamedObject>
List<Object>
Elementen, die in einemList<NamedObject>
, downcasting in den Prozess, tun, Sortieren, kopieren Sie Sie wiederOption 3 würde so Aussehen:
InformationsquelleAutor der Antwort Mike E
InformationsquelleAutor der Antwort George Freire
Verwendung Von Java 8 Komparator.vergleichen:
InformationsquelleAutor der Antwort Oleksandr
Versuchen Sie dies:
InformationsquelleAutor der Antwort Alper Karaağaçlı