Collections.sort und List.sort mit Lambda Verwirrung

Diskutiere Collections.sort und List.sort mit Lambda Verwirrung im Java Basics - Anfänger-Themen Bereich.
O

ocsme

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?
 
mrBrown

mrBrown

Bei mir funktioniert Collections.sort(sting, (o1, o2) -> o2.compareTo(o1)); problemlos. Compilierst du "per Hand" oder meckert nur die IDE, wenn ja welche?
 
T

temi

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);
 
O

ocsme

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:
I

insert2020

Bei Eclipse muss man manchmal vorher wissen, dass das, was man tut, richtig ist, auch wenn's es als falsch unterkringelt wird. ;)
 
T

temi

@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);
 
Thema: 

Collections.sort und List.sort mit Lambda Verwirrung

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben