Wie lege ich ein Attribut comparator an?

berserkerdq2

Bekanntes Mitglied
Hi, ich soll ein comparator attribut, mit Comparator<String> anlegen, damit meint man wahrscheinlich eine anonyme klasse oder?
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Hi, ich soll ein comparator attribut, mit Comparator<String> anlegen, damit meint man wahrscheinlich eine anonyme klasse oder?
Also ich bin mir jetzt nicht ganz sicher, was da gefordert ist. Ein Attribut ist erst einmal nur eine Instanzvariable, also sowas wie:
Comparator<String> someComparator;

Das kann man jetzt natürlich auf viele Wege mit Inhalt füllen. Ein Weg dabei ist durchaus die Anonyme Klasse, die dann so aussehen könnte:
Java:
        Comparator<String> someComparator = new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                // Code ...
            }
        };

Dieser Aufbau ist aber seit Java 8 veraltet. Das Comparator Interface hat nur eine Methode und damit ist es ein funktionales Interface. Daher kann man das entsprechend auch mit Methodenreferenzen oder per Lambda Ausdruck füllen.

Und natürlich gibt es da auch genug einfache Wege, wie man etwas aufbauen kann. So bietet Comparator einige Möglichkeiten, die dann so in der Form aussehen könnten:
Java:
        Comparator<Test> someComparator = Comparator
                .comparing(Test::getSomeAttribute)
                .thenComparing(Test::getSomeOtherAttribute);
Was dann ein Comparator für eine Klasse Test erstellt und dabei wird erst verglichen, was getSomeAttribute zurück gibt und wenn das gleich war, dan wird getSomeOtherAttribute geprüft.

Das wird jetzt ggf. etwas über das hinaus gegangen sein, was ihr bisher hattet aber zum einen weiss ich nicht, wie vciel ihr schon gelernt habt und zum anderen ist es aus meiner Sicht wichtig, dass man relativ schnell lernt, die Möglichkeiten, die es so gibt, auch zu nutzen.
 

berserkerdq2

Bekanntes Mitglied
Also ich bin mir jetzt nicht ganz sicher, was da gefordert ist. Ein Attribut ist erst einmal nur eine Instanzvariable, also sowas wie:
Comparator<String> someComparator;

Das kann man jetzt natürlich auf viele Wege mit Inhalt füllen. Ein Weg dabei ist durchaus die Anonyme Klasse, die dann so aussehen könnte:
Java:
        Comparator<String> someComparator = new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                // Code ...
            }
        };

Dieser Aufbau ist aber seit Java 8 veraltet. Das Comparator Interface hat nur eine Methode und damit ist es ein funktionales Interface. Daher kann man das entsprechend auch mit Methodenreferenzen oder per Lambda Ausdruck füllen.

Und natürlich gibt es da auch genug einfache Wege, wie man etwas aufbauen kann. So bietet Comparator einige Möglichkeiten, die dann so in der Form aussehen könnten:
Java:
        Comparator<Test> someComparator = Comparator
                .comparing(Test::getSomeAttribute)
                .thenComparing(Test::getSomeOtherAttribute);
Was dann ein Comparator für eine Klasse Test erstellt und dabei wird erst verglichen, was getSomeAttribute zurück gibt und wenn das gleich war, dan wird getSomeOtherAttribute geprüft.

Das wird jetzt ggf. etwas über das hinaus gegangen sein, was ihr bisher hattet aber zum einen weiss ich nicht, wie vciel ihr schon gelernt habt und zum anderen ist es aus meiner Sicht wichtig, dass man relativ schnell lernt, die Möglichkeiten, die es so gibt, auch zu nutzen.
Danke, ich soll die String lexikalisch vergleichen, wenn ich nun z. B. den comparator als anonyme Klasse nutze und dann die Methode compare verwende, muss die selber noch definieren also was in compare passiert? Wenn ja, warum sollte ich dann einen COmparator verwenden, wenn ich selber schreiben muss, wie der Vergleiuch funktioniert, da kann ich doch gleich einfach eine Methode erstellen ode rnicht?

Java:
        Comparator<String> someComparator = new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                // Also muss ich hier noch selber schreiben, wie genau der Vergleich, den ich will funktioniert? Wenn ja wozu benötigt man ein comparator, da kann ich doch gleich eine MEthode einfach erstellen und meinen VErgleich definieren?
            }
        };
 

Oneixee5

Top Contributor
warum sollte ich dann einen COmparator verwenden,
Natürlich kannst du eine Methode definieren, welche Strings vergleicht. Fraglich ist nur was dir dieser Vergleich dann nützt. Willst du bspw. mit Hilfe des Vergleichs eine Liste sortieren, muss du die Sortierung dann auch noch programmieren. Es geht aber einfacher mit bereits fertigen Methoden, zB.:
Java:
Collections.sort(list, comparator);
Wie du siehst ist hier die Sortierung einer Liste für dich fix und fertig programmiert. Alles was du noch brauchst ist eine Methode für den Vergleich. Comparator stellt diese Methode zur Verfügung und erzwingt die Implementierung.
String lexikalisch vergleichen
"lexikalisch" bedeutet nach der Bedeutung des Wortes zu sortieren. Ich glaube nicht, dass das von dir gefordert wird. das ist sehr komplex. Strings mit natürlichsprachlicher Bedeutung kann man je nach Sprache mit einem Collator vergleichen, auch das gibt es schon fertig
Java:
Collator.getInstance(Locale.GERMAN)
und du musst dir darum keine Gedanken machen.
Comparator bietet aber den Vorteil, das du deine ganz persönlich Sortierung erzwingen kannst.
 

berserkerdq2

Bekanntes Mitglied
Natürlich kannst du eine Methode definieren, welche Strings vergleicht. Fraglich ist nur was dir dieser Vergleich dann nützt. Willst du bspw. mit Hilfe des Vergleichs eine Liste sortieren, muss du die Sortierung dann auch noch programmieren. Es geht aber einfacher mit bereits fertigen Methoden, zB.:
Java:
Collections.sort(list, comparator);
Wie du siehst ist hier die Sortierung einer Liste für dich fix und fertig programmiert. Alles was du noch brauchst ist eine Methode für den Vergleich. Comparator stellt diese Methode zur Verfügung und erzwingt die Implementierung.

"lexikalisch" bedeutet nach der Bedeutung des Wortes zu sortieren. Ich glaube nicht, dass das von dir gefordert wird. das ist sehr komplex. Strings mit natürlichsprachlicher Bedeutung kann man je nach Sprache mit einem Collator vergleichen, auch das gibt es schon fertig
Java:
Collator.getInstance(Locale.GERMAN)
und du musst dir darum keine Gedanken machen.
Comparator bietet aber den Vorteil, das du deine ganz persönlich Sortierung erzwingen kannst.
Okay, danke, wenn ich nun über die anonyme Klasse die Methode definiert habe, wie nutze ich diese Methode? Wie kann ich über die Anonymeklasse darauf zugreifen?
 

Oneixee5

Top Contributor
Auf eine Methode greift man über ihren Namen zu:
Java:
Comparator<String> someComparator = new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                // Also muss ich hier noch selber schreiben, wie genau der Vergleich, den ich will funktioniert? Wenn ja wozu benötigt man ein comparator, da kann ich doch gleich eine MEthode einfach erstellen und meinen VErgleich definieren?
            }
        };
Java:
int result = someComparator.compare("A", "B");
Aber normalerweise musst du das nicht selbst aufrufen.
 

berserkerdq2

Bekanntes Mitglied
Auf eine Methode greift man über ihren Namen zu:
Java:
Comparator<String> someComparator = new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                // Also muss ich hier noch selber schreiben, wie genau der Vergleich, den ich will funktioniert? Wenn ja wozu benötigt man ein comparator, da kann ich doch gleich eine MEthode einfach erstellen und meinen VErgleich definieren?
            }
        };
Java:
int result = someComparator.compare("A", "B");
Aber normalerweise musst du das nicht selbst aufrufen.
Genau, mein Problem ist nur, dass ich die anonyme Klasse als private habe und in einer anderen Klasse nutzen muss?
 

Oneixee5

Top Contributor
Dann überlege was du über Sichtbarkeit und Get- und Set-Methoden gelernt hast. Irgendwie hört sich das aber komisch an. Warum sollte man eine anonyme Klasse in Klasse A erstellen wenn man diese in Klasse B braucht? Erstelle doch gleich eine reguläre Klasse oder Singelton, die du instanziieren kannst wo du sie brauchst.
 

berserkerdq2

Bekanntes Mitglied
Dann überlege was du über Sichtbarkeit und Get- und Set-Methoden gelernt hast. Irgendwie hört sich das aber komisch an. Warum sollte man eine anonyme Klasse in Klasse A erstellen wenn man diese in Klasse B braucht? Erstelle doch gleich eine reguläre Klasse oder Singelton, die du instanziieren kannst wo du sie brauchst.
Das frage ich mich ehrlich gesagt auch.

Außerdem sorry, aber noch eine Frage, ich soll das alphabetisch sortieren, kann ich da nicht einfach die compareTo Methode verwenden?
 
G

Gelöschtes Mitglied 65838

Gast
die natürliche Ordnung von string ist alphabetisch soweit ich weiß, aber wenn du eine andere Ordnung brauchst stehst du wieder vor dem Problem dass du nicht weißt wie es geht
 

Oneixee5

Top Contributor
Wie ich oben geschrieben habe, um Strings aus der deutschen Sprache zu sortieren: nutze Collator - dieser implementiert Comparator. Es ist aber grundsätzlich möglich. Letztlich würde das dann so aussehen:
Java:
Comparator<String> someComparator = String::compareTo;
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Wie lege ich eine durch Random ausgesuchte Zahl in ein Array? Java Basics - Anfänger-Themen 3
G Wie lege ich ein Array für 10 Personen an???? Java Basics - Anfänger-Themen 25
G Wie lege ich die Größe von Buttons fest? Java Basics - Anfänger-Themen 5
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
M Wie kann ich festlegen, dass ein Attribut maximal den Wert 0 erreicht, also nicht in den negativen Bereich fällt? Java Basics - Anfänger-Themen 4
U Wie ein Attribut von einer Klassenmethode in der Klasse speichern= Java Basics - Anfänger-Themen 2
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
C Setter-Methode mit final-Attribut Java Basics - Anfänger-Themen 9
T Inhalt aus TextField in Attribut einer Instanz schreiben Java Basics - Anfänger-Themen 5
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
C Zugriff auf Attribut von Oberklasse Java Basics - Anfänger-Themen 8
D Attribut Telefonnummer - eigene Klasse oder String Java Basics - Anfänger-Themen 13
itsmejo Erste Schritte Auf Attribut einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 14
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
X Attribut initialisieren Java Basics - Anfänger-Themen 1
Z Attribut ändern ohne Kontrollstruktur Java Basics - Anfänger-Themen 2
S NIO lesbares und beschreibbares Attribut setzen Java Basics - Anfänger-Themen 1
X Auf Attribut einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 2
H Objekt als Attribut speichern Java Basics - Anfänger-Themen 11
N Fehler bei string Attribut! Java Basics - Anfänger-Themen 18
B Attribut vom Typ einer Klasse? Java Basics - Anfänger-Themen 3
D Klassen Warum wird das Attribut nicht ausgegeben? Java Basics - Anfänger-Themen 8
N Attribut einer anderen Klasse übertragen/verwenden Java Basics - Anfänger-Themen 5
Aprendiendo Zwei Fragen und ein geerbtes "protected"-Attribut Java Basics - Anfänger-Themen 2
S Zugriff auf Attribut einer unbekannten Klasse erhalten Java Basics - Anfänger-Themen 6
N Methoden Attribut Abfrage eines anderen Objektes Java Basics - Anfänger-Themen 36
A Kann man ein Attribut aus einer anderen Klasse nutzen? Java Basics - Anfänger-Themen 3
A Private Attribut aus fremder Klasse lesen ? Java Basics - Anfänger-Themen 19
J Objekt mit Attribut "ansprechen" Java Basics - Anfänger-Themen 7
J Innerhalb Interfacemethode: Interface als Attribut Java Basics - Anfänger-Themen 2
V Attribut aus aus jedem ArrayListen index auf Bildschirm ausgeben Java Basics - Anfänger-Themen 9
W Attribut Werte eines Objekts mit gettern ausgeben Java Basics - Anfänger-Themen 5
C Probleme bei einem Stringvergleich - Attribut "value" unterscheidet sich Java Basics - Anfänger-Themen 9
B Klassenübergreifendes Objekt Attribut Java Basics - Anfänger-Themen 7
P Ausnahme, wenn Attribut nicht definiert Java Basics - Anfänger-Themen 4
V Auf Objektreferenz über Attribut zugreifen Java Basics - Anfänger-Themen 10
M Objekt mit Liste als Attribut seralisieren? Java Basics - Anfänger-Themen 5
S Ein Attribut/Instanz eines bestehendes Objektes mit SETTER Methode ändern Java Basics - Anfänger-Themen 3
R Variablen final String Variable als Attribut veränderbar? Java Basics - Anfänger-Themen 21
V Methoden Zeilen nach bestimmtem Attribut sortieren Java Basics - Anfänger-Themen 4
Blindxantos Datentypen Uhrzeit in einem Attribut speichern Java Basics - Anfänger-Themen 3
H DOM Attribut als ID kennzeichnen Java Basics - Anfänger-Themen 12
L Methoden In einer Klasse ein Attribut aus einer anderen Klasse setzen Java Basics - Anfänger-Themen 8
M JLabel attribut wert zuweisen Java Basics - Anfänger-Themen 2
P Enum Attribut in Konstruktoren Java Basics - Anfänger-Themen 10
C Liste mit Attribut Abstract vererben Java Basics - Anfänger-Themen 11
I Von einer Methode eines Objektes auf Attribut eines Objektes anderer Klasse zugreifen Java Basics - Anfänger-Themen 4
Ollek Collections ArrayList Object - Attribut von dem Object vergleichen Java Basics - Anfänger-Themen 7
M .toString(); // Ausgabe: Attribut von Vaterklasse Java Basics - Anfänger-Themen 12
K OOP Datenkapselung mittels private - length Attribut bei Array Java Basics - Anfänger-Themen 3
K Attribut als Referenz auf Objekt Java Basics - Anfänger-Themen 8
J Variable vs Attribut Java Basics - Anfänger-Themen 4
S Klasse als Attribut implementieren Java Basics - Anfänger-Themen 2
W Maven2 <packaging>jar</packaging> über Attribut auf WAR ändern Java Basics - Anfänger-Themen 5
X Attribut in n Objekten suchen Java Basics - Anfänger-Themen 8
G Objekte mit dem Attribut title mit Comparator sortieren Java Basics - Anfänger-Themen 5
P Objekte als Attribut: Referenz oder Kopie? Java Basics - Anfänger-Themen 3
D Zugriff auf attribut anderer Klasse privat/public? Java Basics - Anfänger-Themen 9
R Suchen nach Attribut Java Basics - Anfänger-Themen 5
S Attribut beim erzuegen eines Objektes automatisch erhöhen Java Basics - Anfänger-Themen 6
? Zugriff auf Attribut einer anderen Klasse Java Basics - Anfänger-Themen 2
M probleme mit array (als attribut einer klasse) Java Basics - Anfänger-Themen 2
W Attribut nur in Unterklasse ändern Java Basics - Anfänger-Themen 10
J Attribut casten Java Basics - Anfänger-Themen 3
I Mehrere Klasseninstanzen ueber Attribut sortieren? Java Basics - Anfänger-Themen 2
J Attribut vom Objekt einer eigenen Klasse setzen Java Basics - Anfänger-Themen 6
megachucky wie bekomm ich ein private attribut aus einer andren klasse? Java Basics - Anfänger-Themen 18
J Wie greife ich vonEvent-Handler auf Attribut einer Klasse zu Java Basics - Anfänger-Themen 5
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
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

Ähnliche Java Themen

Neue Themen


Oben