Sortier alternativen mit der compareTo Methode?

julia_76

Mitglied
Hallo,

ich habe folgendes Problem beim Sortieren eines Arrays. Ich möchte das Array nach der natürlichen Reihenfolge sortieren und wahlweise eine alternative sortierung wählen.

Ich habe das Array zu beginn mit der Collection.sort sortiert. Dies funktionierte ohne Probleme. Dann habe ich eine campareTo Methode angelegt, in der ich sage das er nach einem anderen Attribut sortieren soll. Jetzt wird aber immer nach dem festgelegten Attribut sortiert.
Wie ist es möglich mehrere sortier Reihenfolge zu benutzen.

im Code sieht das so aus.

Java:
final static List<Contact> result = new ArrayList<Contact>();

Java:
@Override
	public int compareTo(Contact o) {
		
		return getSurname().compareTo(o.getSurname());
	}

Java:
class ContactNameComparator implements Comparator<Contact> {
		
	    public int compare(Contact contact1, Contact contact2) {
	        return contact1.getSurname().compareTo(contact2.getSurname());
	    }
	}

Java:
public void selectetAddressSourceList(){
		
		parseSelectetdAddressProvider();
		Collections.sort(result);
		doubleEntryClean(result);
		printAdressBook(result);
		
		return;
	}

Gruß,
 

Bug Fisher

Bekanntes Mitglied
Du sortierst in beiden Varianten nach dem Attribut, das dir getSurname() liefert und nutzt dazu (vermutlich) implizit die Implementierung die aus java.lang.String stammt.

Wieso genau erwartest du jetzt unterschiedliche Ergebnisse ?
 

julia_76

Mitglied
und genau das ist ja meine Frage. Durch die Methode compareTo überschreibe ich die natürliche Sortierung, und sortiere nach getSurname. Ich möchte das "result" Array jedoch auf zwei Arten sortieren.

1. nach der natürlichen Sortierung.
2. über die Methode"compareTo" getSurname.

Jetzt ist die Frage wie kann ich die natürliche Sortierung anwenden. An irgend einer Stelle, muss ich dann doch eine Fallunterscheidung einbauen, wo ich sagen kann nach welchem kriterium (natürlich oder getSurname) Sortiert werden muss.

Gruß
 

Harry Kane

Top Contributor
Du hast uns zwar die Deklaration von Contact verschwiegen, aber ich vermute mal, das Contact das interface Comparable<Contact> implementiert. In diesem Fall ist die natürliche Sortierung durch die Implementierung von compareTo festgelegt. Und diese hast du selbst so festgelegt, dass nach surname sortiert wird.
Oder kurz gesagt: Die Sortierung nach surname ist die natürliche Sortierung, weil du sie so festgelegt hast. Du hast nix "überschrieben". Wenn du zwischen verschiedenen Sortierungen umschalten wilst, könntest du einfach verschiedene Comparatoren schreiben.
 
Zuletzt bearbeitet:

julia_76

Mitglied
Erst einmal danke für die Erklärung.
Sorry das ich die Implementierung verschwiegen habe.

Von der Erklärung her habe ich das verstanden. Der Angelegte Comparator mit der compareTo Methode stellt aktuell meine natürliche suche dar. So weit Ok.
Ich verstehe auch das ich für jedes weiter Suchkriterium einen weiteren Comperator schreiben muss (habe ich getan "class ContactTelephoneNumberComparator implements Comparator<Contact>"). Beide Comperatoren sind bei mir in je einer innere Klassen zusammengefasst.

Java:
class ContactNameComparator implements Comparator<Contact> {
		
	    public int compare(Contact contact1, Contact contact2) {
	        return contact1.getSurname().compareTo(contact2.getSurname());
	    }
	}
	
	class ContactTelephoneNumberComparator implements Comparator<Contact> {
		
	    public int compare(Contact contact1, Contact contact2) {
	        return contact1.getTelephoneNumber().compareTo(contact2.getTelephoneNumber());
	    }
	}

Was mir jetzt immer noch nicht klar ist, wie es an dieser Stelle weitergeht.
Ich verstehe das jetzt so, das ich später beim aufruf der Methode sort() eine gewünschte Sortierung aufrufen muss. Aber dieses aufrufen und das Zusammenspiel mit der compareTo methode in der Klasse Contact erschließt sich mir noch nicht.
Über weitere hilfe wäre ich dankbar.

Der Aufruf ein der sort() Methode stelle ich mir dann in etwa so vor.

Java:
Collections.sort(result,  (aufruf comparator) );

Gruß
 

julia_76

Mitglied
Heute Mittag ist dann der Groschen gefallen. Im Prinzip war ja schon alles erledigt. Es hat lediglich nur noch diese zeile gefehlt.

Java:
Collections.sort(result, new ContactNameComparator());

Dennoch danke für die Hilfe und erklärungen.

Gruß
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
C Laufzeit eines Sortier-Algorithmus ermitteln Java Basics - Anfänger-Themen 4
kaoZ Methoden Eigenen Sortier Methode erstellen Java Basics - Anfänger-Themen 5
S Sortier Frage (schleifen HILFE) Java Basics - Anfänger-Themen 6
S Alternativen zu PropertyChangeSupport..? Java Basics - Anfänger-Themen 5
A Alternativen zu Android Studio ??? Java Basics - Anfänger-Themen 14
T Input/Output Alternativen zu setText Java Basics - Anfänger-Themen 3
H alternativen zu if .. else .. Java Basics - Anfänger-Themen 11
E Alternativen zur binären Serialisierung ? Java Basics - Anfänger-Themen 9
F Alternativen zu runnable JAR? Java Basics - Anfänger-Themen 13
G Hibernate, JDO und Alternativen Java Basics - Anfänger-Themen 4
G isdirectory alternativen Java Basics - Anfänger-Themen 8
J Wartezustand in Endlosschleife - bessere Alternativen Java Basics - Anfänger-Themen 20
M Libraries für Arbeit mit Excel (Alternativen) Java Basics - Anfänger-Themen 2
J Bilder auf Container oder alternativen Java Basics - Anfänger-Themen 2
Cassy3 Generics - CompareTo Java Basics - Anfänger-Themen 21
J compareTo()- und equals-Methode Java Basics - Anfänger-Themen 3
X compareTo Methode wird ignoriert Java Basics - Anfänger-Themen 7
O compareTo nach mehreren Kriterien Java Basics - Anfänger-Themen 13
J Hashmap langsamer als compareTo? Java Basics - Anfänger-Themen 23
B Methoden compare() und compareTo() Java Basics - Anfänger-Themen 1
P compareTo() Java Basics - Anfänger-Themen 3
C compareTo verwenden Java Basics - Anfänger-Themen 2
T Datentypen compareTo() u. equals() bei Strings Java Basics - Anfänger-Themen 3
K hashCode, compareTo vs. equals Java Basics - Anfänger-Themen 3
J TreeSet mit compareTo sortieren Java Basics - Anfänger-Themen 2
K compareTo(String arg) überschreiben Java Basics - Anfänger-Themen 4
N Compiler-Fehler Comparable / compareTo implementierung Java Basics - Anfänger-Themen 2
M CompareTo soll Datum sortieren Java Basics - Anfänger-Themen 2
S compareTo() und equals() Java Basics - Anfänger-Themen 6
A Objekte aus 2 Klassen mit compareTo() vergleichen Java Basics - Anfänger-Themen 7
K CompareTo zwei mal benutzen klappt nicht. Java Basics - Anfänger-Themen 2
1 HILFE! Strings mit CompareTo vergleichen Java Basics - Anfänger-Themen 3
R compareTo & equals Java Basics - Anfänger-Themen 10
T Methoden Wie compareTo() Methode implementieren? Java Basics - Anfänger-Themen 9
T Strings mit compareto vergleichen und array sortieren Java Basics - Anfänger-Themen 14
P Generischer Binärbaum (compareTo Frage) Java Basics - Anfänger-Themen 4
J Probleme mit Comparable, compareTo() Java Basics - Anfänger-Themen 2
R compareTo Liste sortieren Java Basics - Anfänger-Themen 5
L compareTo bei Strings? Java Basics - Anfänger-Themen 4
D OOP mit compareTo Array sortieren (aus zwei Klassen) Java Basics - Anfänger-Themen 3
T compareTo warum geht es nicht? Java Basics - Anfänger-Themen 2
W compareTo für 3 Strings Java Basics - Anfänger-Themen 11
M compareTo-Sortierungsproblem Java Basics - Anfänger-Themen 16
F compareTo - Sortierung nach 2 Argumenten Java Basics - Anfänger-Themen 10
G in compareTo umschreiben Java Basics - Anfänger-Themen 4
A Die "compareTo( )" methode Java Basics - Anfänger-Themen 16
J compareTo Java Basics - Anfänger-Themen 4
G compareTo Java Basics - Anfänger-Themen 12
T Wie geht das mit compareTo Java Basics - Anfänger-Themen 2
M o.compareTo(o) Java Basics - Anfänger-Themen 13
K compareTo in Verbinug mit Arrays.sort() Java Basics - Anfänger-Themen 4
Bierhumpen compareTo. Wie setze ich es ein Java Basics - Anfänger-Themen 11
R compareTo Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben