Sortieren ArrayList Arraylist<String> in java
Ich habe eine ArrayList mit ArrayList von String.
In der Äußeren ArrayList auf den einzelnen index jedes Innere ArrayList hat vier Elemente, die vier Parameter.
- Kontakte Id
- Kontakte Name
- Kontakte Adresse
- Kontakte Anzahl
Möchte ich nun Sortieren Sie die komplette ArrayList mit dem auf der Grundlage der Kontakt-Name-Parameter.
Bedeutet, möchte ich Zugang zu den äußeren Arraylist und die innere ArrayList auf jedes index der äußeren Arraylist sortiert nach kontaktperson.
Komparator /Vergleichbare Schnittstellen ist nicht wahrscheinlich, um mir zu helfen.
Sammlung.Sortieren können mir nicht helfen
Sortieren Arraylist Arraylist Bean. Ich habe diesen Beitrag gelesen, aber es ist für ArrayList
von ArrayList<Object>
. Wie, um herauszufinden, dieses problem?
Wenn Ihre innere array-Liste wird erwartet, dass immer vier Elemente mit gut definierten stellen, dass eine Klasse mit den Feldern für die
Contacts Id, Name, Address and Number
und haben eine ArrayList
dieser Klasse.Nein, er hat eine Liste von Listen, nicht mit 4 separaten Listen.
C ist die richtige.
Ja, ich weiß, dass er eine Liste von Listen. Ich war einfach nicht sicher, wenn gab es eine Liste pro Kontakt, oder 4 innere Listen, wo alle Kontakt-Informationen gespeichert ist, auf den gleichen index in jedem dieser 4 Listen 😉 OP haben könnte gelöscht, die zeigen, wie er sich füllt, die Liste der Listen.
InformationsquelleAutor Nikhil Agrawal | 2013-04-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, Ihre Listen in Ihrer Liste hat, die Zeichenfolgen in der Reihenfolge id, name, Adresse und Anzahl (d.h. name ist bei index 1) verwenden, können Sie ein
Comparator
wie folgt:Übrigens, es kommt nicht darauf an, dass Sie mit
ArrayList
: Es ist guter Programmierstil, Variablen deklarieren, mit dem abstrakten Typ, d.h.List
(wie ich in diesem code).InformationsquelleAutor Bohemian
Ich fühle mich schlecht, dieses posting, weil
List<Contact>
wäre die viel besser Wahl. Sowas wäre möglich, aber:InformationsquelleAutor jlordo
Ich denke, ich bin einfach davon ausgegangen, Sie hatten zum Sortieren einer Liste von string-arrays... das ist, warum ich die Liste sortiert, der inneren arrays den ersten, dann sortiert der äußeren Liste durch einen Vergleich der 1. Artikel von jedem array. Nicht gelesen die Kontakte, die Sie hatten in Ihrer Antwort.
Entfernen Sie In diesem Fall die for-Schleife für die Sortierung der inneren Liste, und Sie sollten noch in der Lage sein Sortieren mit comparator, aber im Vergleich zu den rechts-index statt des 1. Elements.
Sammlungen.Sortieren(listOfLists, neue ListOfStringListComparator());
InformationsquelleAutor msoori
Erstellen Sie eine Klasse für Ihre Daten-Struktur (wenn Sie nicht können, dann geben Sie an, warum. Ich sehe keinen guten Grund, nicht zu):
Dann verwenden Sie, die in Ihrer Liste statt:
Sortierung es werden dann trivial.
Dann geben Sie Ihren Senioren einen tritt in Ihre Hintern! Zeigen Sie Ihnen, Sie wissen es besser, und tun es richtig 😉
Sie sind wahr, Nilsh. Aber jetzt bitte mir eine Lösung.
Die Lösung ist, besuchen Sie Ihre lokale Schuhgeschäft und kaufen einige heavy-duty-butt-kicking boots 🙂
Es gibt viele andere Antworten auf deine Frage hier, wenn Sie auf der Suche nach einer Lösung, die nicht die Verbesserung der code-Qualität.
InformationsquelleAutor NilsH
Verwenden Sie die folgenden Komparator:
Hier
indexToCompare
ist der index der arraylist entspricht und Kontakt Name. In deinem Fall "1"InformationsquelleAutor Arjun Rao
Falsch. Sie haben Objekte. All die Dinge, die Sie versuchen, zu Sortieren, sind Objekte.
Wenn Sie versuchen, Sortieren Sie die
ArrayList<String>
Objekte in einemArrayList<ArrayList<String>>
Sie implementieren müssen, um eineComparator<ArrayList<String>>
. (Der Vergleichbare Ansatz ist der falsche für diese Daten-Struktur. Sie würde erklären müssen eine benutzerdefinierte Unterklasse von ArrayList ... und das ist, igitt!)Aber eine bessere Idee wäre, stellen Sie Ihre Objekte mit benutzerdefinierten Klassen. In diesem Fall, Ihre
ArrayList of String
sollte es sich um einen benutzerdefiniertenContact
Klasse mit 4 Felder, Getter und (wenn erforderlich) - setter. Dann erklären Sie, wie die ImplementierungComparable<Contact>
) und implementieren Sie diecompareTo
Methode.Anderen Antworten zeigen, wie zu implementieren, die einen Komparator auf genau ein Feld von der Liste. Dass kann ausreichend sein, aber es wird geben Sie eine Sortierreihenfolge an, wo die Reihenfolge von ein paar anderen "John Smith"s wäre unbestimmt. (Ich würde eine zweite Feld als tie-breaker. Das Id-Feld wäre ideal, wenn die ids eindeutig sind.)
Siehe Arjun Rao ' s Antwort für eine einfache Beispiel, die Sorten auf nur eines der Felder ...
C ich bin die Korrektur meiner Aussage.Komparator / Vergleichbare Schnittstellen können nicht helfen, weil ich nicht alle Objekte.Vielen Dank, dass mir bewusst.
InformationsquelleAutor Stephen C
Ich denke, dies ist ein Fall, der nicht die Behandlung von Sammlungen als first-class-Objekte. Haben Sie eine neue Klasse namens "Kontakt" anstelle der Abstraktion, als eine ArrayList, und verwenden Sie den Komparator.
InformationsquelleAutor aquaraga