Comparator

  • Themenstarter Themenstarter midnattens
  • Beginndatum Beginndatum
M

midnattens

Gast
Hallo und schönen Abend zusammen!

Ich habe zwar schon etliche Jahre Programmiererfahrung aber in Sachen Java bin ich blutiger Anfänger.
Deshalb komme ich gleich zur Sache

Ich habe eine Liste:

Java:
private List<String> selectedWords = new ArrayList<String>();
selectedWords.add("Katalysator");
selectedWords.add("Buschenschank");
selectedWords.add("Firma");
selectedWords.add("Freizeit");

Collections.sort(selectedWords, new LengthComparator());

class LengthComparator implements Comparator<List<String>> {
	public int compare(List<String> o1, List<String> o2) {
		return o2.size() - o1.size();
	}
}

Leider bekomme ich hier einen Fehler und weiss nicht warum?
The method sort(List<T>, Comparator<? super T>) in the type Collections is not applicable for the arguments (List<String>, LengthComparator)
und kann damit nichts anfangen...

Vielen Dank für eure Unterstützung!
Danke
midnattens
 
Ich glaube, dass der Comperator, wenn du ihn typisieren willst, dann Comperator<String> heißen muss.

Es werden immer die Objekte innerhalb der Liste verglichen und keine Listen, es sei denn du hast eine Collection von Listen.
 
Mhm, was genau hast du denn da vor?

Comparator<List<String>> geht an dieser Stelle eben nicht, wiel du eine Liste von Strings hast, und nicht eine Liste von Listen mit Strings, daher geht dein Comparator dort nicht.

Hättest du List<List<String>> selectedWords = new ArrayList<List<String>>(); so etwas, würde dien Comparator nach der Längen der Listen soertieren..aber was genau willst du machen? 🙂
 
Hallo!

Ich möchte die Liste nach Stringlängen sortieren, nichts weiter...

Vielen Dank!
midnattens
 
Ein Comparator<X> kann zwei X-Objekte miteinander vergleichen. Collection.sort() erwartet eine Liste von X-Objekten und einen entsprechenden Comparator<X>.

Dein X für den Comparator ist nun List<String>. Damit kann sort aber nur eine List<List<String>> sortieren. Du übergibst aber nur eine List<String>. Um die sortieren zu können, bräuchstest du einen Comparator<String>, nicht Comparator<List<String>>.
 
Java:
private List<String> selectedWords = new ArrayList<String>();
selectedWords.add("Katalysator");
selectedWords.add("Buschenschank");
selectedWords.add("Firma");
selectedWords.add("Freizeit");
 
Collections.sort(selectedWords, new LengthComparator());
 
class LengthComparator implements Comparator<String> {
    public int compare(String o1, String o2) {
        return o2.lenght() - o1.lenght();
    }
}
 
Java:
class LengthComparator implements Comparator<String> {
	@Override
	public int compare(String o1, String o2) {
		return o2.length() - o1.length();
	} 
}

EDIT: tja, wieder zu langsam...
 

Zurück
Oben