Sortieren von Objekten in einem Set mit einem String-Wert, der alle Objekte enthalten
Ok das ist eine knifflige Sache. Ich habe eine Liste von Sätzen. Ich möchte Sie zum Sortieren der Objekte in die Sätze in Ordnung.
Vorstellen, jeden Satz als repressenting eine Klasse in einer Schule. Jedes set enthält eine person-Objekte. Ein person-Objekt enthält einen String-Wert für den Namen. Ich würde gern die Personen, die sich in dem Satz mit dem Namen, bevor ich Schleife durch und schreiben Sie Sie aus.
Ist es anywahy zu verwenden Collections.sort();
oder etwas ähnliches, um dies zu erreichen?
for (Set<Person> s : listOfAllChildren) {
for (Person p : s) {
if(p.getClass().equalsIgnoreCase("Jones")){
System.out.println(p.getName());
}
else if...//carry on through other classes
}
}
Ich weiß, dass 2+ Kinder in einer Klasse können denselben Namen haben, aber bitte ignorieren Sie diese
if
in Zeile 2 ist unnötig.Ich hoffe, die
p.getClass()
in Zeile 3 ist nur ein Tippfehler und Sie nicht haben eine individuelle Klasse, die für jede Einzelperson oder Familie 😉Es gibt nur eine Klasse für eine Person, sondern viele person Objekte, die aus dieser Klasse. Ist das ein problem? Die Methode getClass gibt der Lehrer den Namen für die Klasse.Die Person-Objekte werden dynamisch aus Spreadsheet-Daten.
Ich habe den Titel geändert, um die Tatsache widerspiegeln, dass es ist ein Satz, den Sie Sortieren möchten. Rollen Sie zurück, wenn Sie nicht einverstanden sind.
getClass()
nicht einen String zurückgeben (Lehrer name), aber eine Class
Objekt. Vergleichen kann man es in einen String, aber das Ergebnis wird immer false
. Und eine Klasse, die "definiert" getClass()
um einen String zurückzugeben, der wird nicht kompiliert.InformationsquelleAutor Julio | 2010-11-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen
Set
hat keine Ahnung von Bestellung, weil, nun ja, es ist ein set.Es ist ein
SortedSet
Schnittstelle implementiertTreeSet
Klasse, die Sie verwenden können. Geben Sie einfach eine entsprechendeComparator
im Konstruktor, oder lassen Sie IhrePerson
Klasse implementiertComparable
.InformationsquelleAutor Nicolas Repiquet
Müssen Sie implementieren
Vergleichbar
für Ihre sortierbare Objekte (Person
etc).Dann:
Set
Sammlungen.Sortieren
oder
Beispiele:
InformationsquelleAutor sje397
Mit Java 8 können Sie die Art der
Set
von Personen und generierenList
von Personen, die wie folgt sortiert.InformationsquelleAutor ravthiru
Kann man sich überlegen, TreeSet, um Objekte zu speichern. Und beim Sortieren create new TreeSet mit benutzerdefinierten Komparator für Ihre Person-Objekte. Ich weiß nicht empfehlen die Verwendung Sammlung.Sortieren, weil ANMUTIGEN kann es nur Sortieren Listen.
InformationsquelleAutor Alex Nikolaenkov
Könnten Sie Ihren Person-Klasse implementiert die Vergleichbar Schnittstelle, wie gezeigt, hier und dann Sortieren Sie Sie entsprechend an.
InformationsquelleAutor npinti
Möchten Sie vielleicht zu schauen, mit einem
SortedSet
zum Beispiel eineTreeSet
. Dies ermöglicht es Ihnen, eineComparator
was in deinem Fall vergleichen kann, den Namen desPerson
.InformationsquelleAutor Qwerky
Ja! Diese können Sie auf jeden Fall nutzen Sammlung.sort(). Aber Sie müssen verwenden Sie entweder eine sortierte Menge (wie TreeSet). Oder, alternativ, Sie können fügen Sie zunächst alle Elemente in einer Reihe auf eine Liste.
Dann, Ihrer Person-Klasse implementiert werden muss Vergleichbar sind, da diese Schnittstelle wird aufgerufen durch die Sammlungen.sort (), wenn er versucht, zu entscheiden, in welcher Reihenfolge zu platzieren. Also es kann etwas einfaches wie:
Wenn Sie ein TreeSet, es sortiert werden soll bereits. Andernfalls, wenn Sie eine Liste haben, rufen Sie einfach Sammlungen.sort(Liste l) auf jeder Liste.
Ofc, aktualisiert meine Antwort.
+1 weil ich den gleichen Fehler gemacht und jetzt beenden. Aktualisieren Sie Ihre Antwort und noch streiten ;). Ich habe immer verwirren
Set
mitList
.Haha, danke xD
InformationsquelleAutor Nico Huysamen