Collections.sort und List.sort mit Lambda Verwirrung

ocsme

Top Contributor
Hallo zusammen,
bei mir tut sich gerade wieder absolute Verwirrung auf :-(

Ich verstehe gerade nicht wieso ich mit der Hilfsklasse Collections in der Methode sort(...) den Comparator nicht als Lambda übergeben kann.
Hier mal mein Beispiel:
Java:
List<String> sting = new ArrayList<>();
        sting.add("Abc");
        sting.add("Bac");
        sting.add("bBc");
        sting.add("aAc");
    
        Collections.sort(sting, new Comparator<String>() {

            @Override
            public int compare(String o1, String o2) {
                // TODO Auto-generated method stub
                return o2.compareTo(o1);
            }
            
        });

        sting.sort((String o1, String o2) -> o1.compareTo(o2));

So funktioniert mein Beispiel. Nun wollte ich mir aber die Anonyme Klasse sparen und hab versucht das ganze so zu coden:
Java:
 Collections.sort(sting, (String o1, String o2) -> o2.compareTo(o1));
Hier erkennt er die compareTo Methode nicht. Schaut man sich nun die Klassen genauer an ruft die Collections.sort auch nur die List.sort Methode auf!
Java:
    public static <T> void sort(List<T> list, Comparator<? super T> c) {
        list.sort(c);
    }

Kann mir jetzt jemand erklären wieso ich den Lambda Ausdruck nicht in der Collections.sort Methode als Argument übergeben kann? Oder habe ich einen anderen Fehler gemacht?
 
Bei mir funktioniert Collections.sort(sting, (o1, o2) -> o2.compareTo(o1)); problemlos. Compilierst du "per Hand" oder meckert nur die IDE, wenn ja welche?
 
Bei mir funktionieren auch alle diese Möglichkeiten
Java:
sting.sort((String o1, String o2) -> o1.compareTo(o2));
sting.sort((o1, o2) -> o1.compareTo(o2));
sting.sort(Comparator.naturalOrder());
sting.sort(String::compareTo);
 
Ohha ihr habt recht! Ich hätte es einfach mal laufen lassen sollen oh weh.
Es geht, Eclipse erkennt nur die Methoden von String in diesem Falle nicht :-( Wieso weis ich gerade auch nicht. Muss eh mal wieder alles neu aufsetzen.

Dann liegt es also nicht an meinem Verständnis sondern an der IDE :-D
Entschuldigung das war ja jetzt wieder voll Banane von mir =D

@temi ja das geht bei mir ja auch alles 🙂 Es geht um den Aufruf Collections.sort(List, Comparator) <- dort konnte ich den Comparaotr als Lambda nicht übergeben bzw. Eclipse zeigt dann nicht wie gewohnt die Methoden von Stirng z. B. an :-( Darauf dachte ich, ich hätte etwas Falsch gemacht also hab ich den Comparator als Anonyme Klasse ausgecodet. Dort geht das natürlich alles :-D danach war die Verwirrung groß.
Ja so ist das wenn man sich zu sehr an etwas gewöhnt ist ja auch angenehm :-D
 
Zuletzt bearbeitet:
@temi ja das geht bei mir ja auch alles 🙂
Ist ja alles geklärt, deine andere Variante funktioniert natürlich auch:
Java:
Collections.sort(sting, (String o1, String o2) -> o2.compareTo(o1));
Collections.sort(sting, (o1, o2) -> o2.compareTo(o1));
Collections.sort(sting, Comparator.naturalOrder());
Collections.sort(sting, String::compareTo);
 

Neue Themen


Zurück
Oben