ArrayList sortieren (mehrere Kriterien)

Status
Nicht offen für weitere Antworten.
C

Camino

Gast
Hallo,

wie kann ich denn meinen (unten angezeigten) Comparator so ändern, dass ich meine ArrayList nach mehreren Kriterien sortieren kann, z.B. erst nach Nachname und dann nach Vorname (falls evtl. gleiche Nachnamen mehrmals vorkommen)? Oder muss ich für Nachnamen und Vornamen jeweils einen Comparator schreiben und diese dann nacheinander anwenden? Das Sortieren nach nur einem Kriterium (Nachname) klappt so schon mal. Ich hatte auch irgendwo gelesen, dass Collator zum Sortieren von Strings besser wäre. Hab aber leider bisher noch kein Beispiel gefunden, wie ich den Collator anstatt dem Comparator benutze.

Hier die Comparator-Klasse:
Code:
import java.util.Comparator;


public class MyListComparator implements Comparator<Player> {
	
	    public int compare( Player a, Player b ) {

	    	String name1 = ((Player) a).getLastName();
	        String name2 = ((Player) b).getLastName();
	        return name1.compareTo(name2);
	    }
	       
}

Aufgerufen wird der Comparator in der Datenklasse so:
Code:
...
Comparator<Player> comparator = new MyListComparator();
java.util.Collections.sort( playerList, comparator );
...

Vielen Dank schonmal im voraus
Camino
 
C

Camino

Gast
Hab das jetzt mal so umgeschrieben:
Code:
import java.util.Comparator;

public class MyListComparator implements Comparator<Player> {
	
	    public int compare( Player a, Player b ) {

	    	String lastName1 = ((Player) a).getLastName();
	        String lastName2 = ((Player) b).getLastName();
	        String firstName1 = ((Player) a).getFirstName();
	        String firstName2 = ((Player) b).getFirstName();
	        
	        int c1 = lastName1.compareTo(lastName2); // erstes compare
	        if (c1 != 0) {
	        	return c1;
	        } 
	        
	        int c2 = firstName1.compareTo(firstName2); // zweites compare
	        return c2;
  
	    }
	       
}

Scheint erstmal so, als würde es funktionieren. Muss das morgen mal mit mehreren neuen Einträgen testen. Das mit dem Collator muss ich mir auch noch mal genauer anschauen.

Danke
Camino
 
C

Camino

Gast
OK, das Sortieren von Strings mit dem Comparator ist wirklich nicht so toll. Umlaute werden nach hinten sortiert (z.B. "Hab...", "Hen...", "Hum...", "Hän...") und Kleinbuchstaben kommen erst nach allen Grossbuchstaben. Scheint mit dem Collator wohl besser zu funktionieren. Aber ich hab jetzt schon gesucht und nicht rausgefunden, wie es geht. Vielleicht kann mir ja wer nen Tipp geben. Wie kann ich dem Collator sagen, nach welchem/n Werten in den Objekten er sortieren soll?

Code:
Collator col = Collator.getInstance(); 
java.util.Collections.sort( playerList, col );

Da bekomme ich die Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: Player cannot be cast to java.lang.String

In der ArrayList playerList sind Objekte der Klasse Player (mit mehreren Strings) drin.
 
C

Camino

Gast
OK, neuer Versuch, den ich nun gefunden habe...

Der Collator:
Code:
import java.text.CollationKey;
import java.text.Collator;
import java.util.Comparator;


public class CollatorComparator 
        implements Comparator<Player> {
      Collator collator = Collator.getInstance();
      public int compare(Player a, Player b) {
        CollationKey key1 = collator.getCollationKey(
          a.getLastName());
        CollationKey key2 = collator.getCollationKey(
          b.getLastName());
        return key1.compareTo(key2);
      }
    }

Wird so aufgerufen:
Code:
CollatorComparator comp = new CollatorComparator();
Collections.sort(playerList, comp);

Scheint erstmal prima zu funktionieren...
 
S

SlaterB

Gast
der normale Weg wäre wohl etwas in der Art von

public int compare(Player a, Player b) {
int c = collator.compare(string1, string2);
// statt: int c = string1.compareTo(string2);

..
}
 
C

Camino

Gast
OK, hab das mal so umgebaut und auch die Sortierung nach dem 2. Kriterium (Vorname) eingesetzt. Vielen Dank für die Hilfe...

Code:
import java.text.Collator;
import java.util.Comparator;


public class CollatorComparator 
        implements Comparator<Player> {
      Collator collator = Collator.getInstance();
            
      public int compare(Player a, Player b) {
    	  
    	  int c1 = collator.compare(a.getLastName(), b.getLastName());
    	  
	        if (c1 != 0) {
	        	return c1;
	        } 
	        
	      int c2 = collator.compare(a.getFirstName(), b.getFirstName());
	        return c2;
    	    
      }
    }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
L ArrayList sortieren Allgemeine Java-Themen 2
MiMa ArrayList sortieren?? Allgemeine Java-Themen 5
T Collections ArrayList Sortieren Allgemeine Java-Themen 4
K ArrayList sortieren Allgemeine Java-Themen 16
M ArrayList<String>, String häufigkeit sortieren Allgemeine Java-Themen 4
C ArrayList (mit Objekten) sortieren Allgemeine Java-Themen 12
N Zahlen in Strings einer ArrayList sortieren Allgemeine Java-Themen 14
V ArrayList sortieren Allgemeine Java-Themen 7
C ArrayList anhand von zwei Attributen sortieren Allgemeine Java-Themen 4
K ArrayList nach bestimmtem Muster sortieren Allgemeine Java-Themen 3
G ArrayList mit quicksort sortieren Allgemeine Java-Themen 9
C ArrayList nach Datum sortieren Allgemeine Java-Themen 7
O ArrayList sortieren Allgemeine Java-Themen 8
G ArrayList mit Indices parallel sortieren Allgemeine Java-Themen 8
M ArrayList sortieren - HashMap mit sort_id vorhanden Allgemeine Java-Themen 2
E Bitte um Rat: Sortieren mit ArrayList Allgemeine Java-Themen 2
S ArrayList nach mehreren Spalten sortieren? Allgemeine Java-Themen 13
N ArrayList sortieren Allgemeine Java-Themen 10
M Eine ArrayList sortieren? Allgemeine Java-Themen 4
G probleme beim sortieren einer ArrayList Allgemeine Java-Themen 8
E ArrayList Matrix sortieren Allgemeine Java-Themen 4
M ArrayList oder LinkedList Allgemeine Java-Themen 10
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
B Type mismatch: cannot convert from Graph.Edge to ArrayList<Graph.Edge> Allgemeine Java-Themen 21
R ArrayList Allgemeine Java-Themen 4
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
C ArrayList Problem Allgemeine Java-Themen 3
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
S Best Practices CopyConstrutor mit ArrayList Allgemeine Java-Themen 1
S ArrayList Design Allgemeine Java-Themen 4
S Array dynamisieren oder ArrayList verwenden? Allgemeine Java-Themen 17
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
MiMa Person in einer Arraylist hinzugügen mit Prüfung ? Allgemeine Java-Themen 6
X Adjazenzliste ohne ArrayList Allgemeine Java-Themen 6
X Output von ArrayList Allgemeine Java-Themen 3
H Stream in ArrayList umwandeln Allgemeine Java-Themen 2
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
H Arraylist mit anderer ArrayList überschreiben Allgemeine Java-Themen 17
Curtis_MC Pointer mit ArrayList vergleichen Allgemeine Java-Themen 6
F ArrayList`s in Klassen mit Getter/Setter Allgemeine Java-Themen 8
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
F Arraylist vollständig abspeichern und laden Allgemeine Java-Themen 1
R Arraylist in andere Klasse leiten und bearbeiten Allgemeine Java-Themen 10
D ArrayList Indexlänge ändern Allgemeine Java-Themen 2
E Elemente innerhalb einer ArrayList vergleichen Allgemeine Java-Themen 33
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
N Mehrdimensionale ArrayList mischen Allgemeine Java-Themen 10
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
MiMa Date aus einer ArrayList<Date> holen ?? Allgemeine Java-Themen 5
MiMa ArrayList Rückgabewerte aus einer Funktion Allgemeine Java-Themen 15
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
P GUI: ArrayList anzeigen funktioniert nicht Allgemeine Java-Themen 5
H ArrayList: Leere Elemente finden? Allgemeine Java-Themen 2
GreenTeaYT Verständnisprobleme zur Arraylist Allgemeine Java-Themen 1
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
A Bestimmte Inhalte aus ArrayList 1 in ArrayList 2 kopieren Allgemeine Java-Themen 6
S Mehrdimensionales ArrayList ins HashSet Allgemeine Java-Themen 10
C ArrayList Allgemeine Java-Themen 8
Streeber Probleme mit AWT-EventQueue: ArrayList Elemente hinzufügen Allgemeine Java-Themen 1
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
Z NullPointerException beim Schreiben einer ArrayList in eine Datei Allgemeine Java-Themen 6
L Von ArrayList abgeleitete Klasse nur mit bestimmten Objekten füllen Allgemeine Java-Themen 1
K Array in ArrayList Allgemeine Java-Themen 16
Paul15 2D Arraylist in Jtable Allgemeine Java-Themen 1
Paul15 Arraylist 2D Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
Neumi5694 Datentypen ArrayList vs TreeMap Allgemeine Java-Themen 6
F ArrayList Allgemeine Java-Themen 11
X ArrayList will nicht so wie ich will. Hilfe Allgemeine Java-Themen 8
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
M ArrayList mit verschiedenen Datentypen in String konvertieren Allgemeine Java-Themen 10
Z Elemente einer ArrayList von rechts wegnehmen Allgemeine Java-Themen 5
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
R ArrayList und HashMap Allgemeine Java-Themen 7
T ArrayList zeilenumbruch entfernen Allgemeine Java-Themen 13
D Arraylist/For Schleife/Scanner Allgemeine Java-Themen 30
E ArrayList Anzahl der gleichen Elemente Allgemeine Java-Themen 4
Doopy ArrayList plötzlich leer Allgemeine Java-Themen 2
D Arraylist eigener Klasse an iReport übergeben Allgemeine Java-Themen 7
L ArrayList Inhaltstyp. Allgemeine Java-Themen 5
Z Klassen ArrayList selbst machen Allgemeine Java-Themen 5
J Arraylist speichern und laden? Allgemeine Java-Themen 5
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
D ArrayList index auf gültigkeit prüfen Allgemeine Java-Themen 12
M ArrayList<String> Frage Allgemeine Java-Themen 7
O ArrayList kaputt?! Allgemeine Java-Themen 5
M ArrayList<Foo> in ein Foo[] konvertieren? Allgemeine Java-Themen 8
Bananabert Abstract ArrayList Allgemeine Java-Themen 4
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
O ArrayList - Serialisierungs-Problem Allgemeine Java-Themen 11
M JTable + ArrayList Allgemeine Java-Themen 3
M Datentypen ArrayList in Integer konvertieren Allgemeine Java-Themen 3
O Collections ListIterator gibt Inhalt von ArrayList nicht aus Allgemeine Java-Themen 3
Madlip Variablen 3 Werte aus ArrayList und weiter ... Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben