Comparator

Status
Nicht offen für weitere Antworten.

LoN_Nemesis

Bekanntes Mitglied
Hallo,

ich habe eine Frage:

Ich habe eine ziemlich grosse Klasse mit sehr vielen verschiedenen Integer Werten. Nun möchte ich mehrere Instanzen dieser Klasse in eine Liste packen und danach nach einem der Integer Werte sortieren lassen. Aus der Doku entnehme ich, dass ich dazu java.lang.Comparator implementieren muss. Nur wenn ich meine Klasse dieses Interface implementieren lasse, dann kann ich in der compare(Obj arg0, Obj arg1) Methode nur ein Kriterium benutzen um zu bestimmen ob ein Element grösser als das andere ist. Wie mache ich das, wenn ich verschiedene Sortierkriterien einführen will?
 

_charly_

Mitglied
LoN_Nemesis hat gesagt.:
Hallo,

ich habe eine Frage:

Ich habe eine ziemlich grosse Klasse mit sehr vielen verschiedenen Integer Werten. Nun möchte ich mehrere Instanzen dieser Klasse in eine Liste packen und danach nach einem der Integer Werte sortieren lassen. Aus der Doku entnehme ich, dass ich dazu java.lang.Comparator implementieren muss. Nur wenn ich meine Klasse dieses Interface implementieren lasse, dann kann ich in der compare(Obj arg0, Obj arg1) Methode nur ein Kriterium benutzen um zu bestimmen ob ein Element grösser als das andere ist. Wie mache ich das, wenn ich verschiedene Sortierkriterien einführen will?


meine idee:

da ich befürchte das es mit überladen dieser Methode nicht klappt kannst du einfach eine zusätzliche Instanzvariable erstellen, welche das Suchkriterium repräsentiert.

bevor nun ein vergleich durchgeführt wird setzt du diese Variable entsprechend und in der compareTo funktion fragst du diese variable ab und führst enstprechende berechnungen durch...

nur so ne idee...

mfg
 

LoN_Nemesis

Bekanntes Mitglied
Ok ich habe eine bessere Lösung gefunden. Und zwar implementiert meine Klasse selbst nicht comparator, sondern ich mache eine kleine Hilfsklasse, die Comparator implementiert. Diese übergebe ich dann der Sort() Methode von Collections als zweitens Argument.

Also so sieht meine Hilfsklasse aus (Mobile ist meine eigene Klasse mit den vielen Integer Werten):

Code:
class SortBySpeed implements Comparator{

	public int compare(Object arg0, Object arg1) {
		Mobile mob1 = (Mobile)arg0;
		Mobile mob2 = (Mobile)arg0;
		return mob1.getSpeed() - mob2.getSpeed();
	}	
}

Der Methodenaufruf sieht dann so aus (mobiles ist meine Liste welche mehrere Mobile Objekte beeinhaltet):

Code:
public void sortBySpeed() {
		Collections.sort(mobiles, new SortBySpeed());
}


Analog kann ich mir für jedes gewünschte Sortierkriterium eine kleine eigene Klasse schreiben. Vielleicht hilft es ja wem, der ein ähnliches Problem hat.
 
G

Guest

Gast
Genauso funktioniert das mit den Comparatoren.

Jedoch sollte man noch eine Überprüfung auf den Cast machen, wie man dies macht liegt dann wieder ganz daran, mit welcher Java-Version man arbeitet.

Java < 1.5
Code:
class SortBySpeed implements Comparator{

   public int compare(Object arg0, Object arg1) {
      if (!(arg0 instanceof Mobile && arg1 instanceof Mobile)) throw new ClassCastException();
      Mobile mob1 = (Mobile)arg0;
      Mobile mob2 = (Mobile)arg1;
      return mob1.getSpeed() - mob2.getSpeed();
   }   
}

Java 1.5
Code:
class SortBySpeed<M1 extends Mobile, M2 extends Mobile> implements Comparator{

   public int compare(M1 arg0, M2 arg1) {
      Mobile mob1 = arg0;
      Mobile mob2 = arg1;
      return mob1.getSpeed() - mob2.getSpeed();
   }   
}
Ich habe das mit den Generic-Schablonen auch noch nicht so oft in Java gemacht, aber so in etwa sollte das funktionieren.
 

Weegel

Mitglied
Sorry, war nicht angemeldet, aber Gast war in dem Fall ich. Wenns geht, bitte das Post hier hinein editieren, und das Post von Gast löschen. Danke. Wenn nicht - auch gut.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
M Comparator Java Basics - Anfänger-Themen 25
M Comparator Java Basics - Anfänger-Themen 4
berserkerdq2 Wie lege ich ein Attribut comparator an? Java Basics - Anfänger-Themen 13
W Personen sortieren mit Comparator Java Basics - Anfänger-Themen 9
H Comparator Fehlermeldung Java Basics - Anfänger-Themen 5
V Collections ArrayList mit Comparator sortieren Java Basics - Anfänger-Themen 16
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
R Methode zwei Sortierkriterien der Klasse Comparator übergeben Java Basics - Anfänger-Themen 4
O Lambda Ausdrücke in einem Comparator Java Basics - Anfänger-Themen 4
A Priority Queue / Comparator Java Basics - Anfänger-Themen 6
I Comparator<T> Interface als Methodenparamter Java Basics - Anfänger-Themen 4
L Binäre Suche mit Comparator Java Basics - Anfänger-Themen 5
N Comparable bzw Comparator Java Basics - Anfänger-Themen 5
J Comparator Java Basics - Anfänger-Themen 21
A Comparator Java Basics - Anfänger-Themen 4
G Interface java.util.Comparator: Wieso muss nur die Methode compare() implementiert werden Java Basics - Anfänger-Themen 2
V Comparator Java Basics - Anfänger-Themen 16
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
M Comparable und Comparator nicht ganz klar Java Basics - Anfänger-Themen 1
B Comparable & Comparator Java Basics - Anfänger-Themen 9
C Comparator und private Variablen Java Basics - Anfänger-Themen 7
S Comparator für Generiks Java Basics - Anfänger-Themen 6
Helgon Interface Comparator wird nicht instanziert Java Basics - Anfänger-Themen 3
C Comparator mit Double Werten? Java Basics - Anfänger-Themen 12
S Unterschied Comparable und Comparator Java Basics - Anfänger-Themen 2
E Comparator sortiert falsch... Java Basics - Anfänger-Themen 2
M Comparator Java Basics - Anfänger-Themen 7
B OOP Logikhilfe zum Comparator 2 Java Basics - Anfänger-Themen 12
B OOP Logikhilfe zum Comparator Java Basics - Anfänger-Themen 11
G Comparator Problem Java Basics - Anfänger-Themen 5
X eigener Mergesort auf generischen Typen mit Comparator Java Basics - Anfänger-Themen 6
H Comparable und Comparator Java Basics - Anfänger-Themen 22
Z Comparator Verständnisfrage Java Basics - Anfänger-Themen 5
B OOP Comparator - Sortierung "optisch" Darstellen Java Basics - Anfänger-Themen 17
A JTable sortieren mit einem Comparator Java Basics - Anfänger-Themen 2
S Comparator / Comparable ? Java Basics - Anfänger-Themen 3
G Objekte mit dem Attribut title mit Comparator sortieren Java Basics - Anfänger-Themen 5
P unchecked conversion to conform to Comparator Java Basics - Anfänger-Themen 3
G Comparator- methode compare exception werfen Java Basics - Anfänger-Themen 4
B interface Comparator Java Basics - Anfänger-Themen 4
M Hilfe bei der Erstellung der Comparator Klasse Java Basics - Anfänger-Themen 10
M ArrayList sortieren mittels Comparator Java Basics - Anfänger-Themen 10
G Sortieren ohne Comparator? Java Basics - Anfänger-Themen 4
G Comparator Java Basics - Anfänger-Themen 10
S Frage zu Comparator Java Basics - Anfänger-Themen 3
G ArrayList und Comparator Java Basics - Anfänger-Themen 6
M Comparator - Sortierkriterium Java Basics - Anfänger-Themen 11
T Problem mit Comparator! Java Basics - Anfänger-Themen 7
C Anstatt Spalte, Zeile mit Comparator sortieren . Java Basics - Anfänger-Themen 5
B Liste sortieren mit Comparator Java Basics - Anfänger-Themen 2
D Frage zu Collection.sort bzw. Comparator u. Comparable Java Basics - Anfänger-Themen 2
S JTable mit Comparator sortieren, die Frage ist wo? Java Basics - Anfänger-Themen 4
B Wann Comparator und wann Comparable Java Basics - Anfänger-Themen 6
W Comparator Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben