Comparator a compareTo

Comparator a compareTo
BirdSly
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 10 lat
  • Lokalizacja:Rzeszów
  • Postów:15
0

Witam
Mam pytanie o to jakim cudem w miejsce metody przyjmującej 2 argumenty można wsadzić metodę przyjmującą 1 argument.

Tutaj wywoływana jest metoda z 2 argumentami:

Kopiuj
 Collections.sort(list, newMyComparator()::compare)

Kopiuj
 public int compare(MyObject o1, MyObject o2) {
        return o1.compareTo(o2);
    }

a tutaj z 1:

Kopiuj
  Collections.sort(list, MyObject::compareTo)

Kopiuj
 public int compareTo(MyObject o) {
        if(o.x == x)
            return 0;
        else if(o.x > x)
            return -1;
        else
            return 1;
    }
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Bo każda metoda niestatyczna w rzeczywistości ma jeden dodatkowy, niejawny argument jakim jest referencja this.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
BirdSly
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 10 lat
  • Lokalizacja:Rzeszów
  • Postów:15
0

To metoda compare z Comparatora ma 3 argumenty a compareTo 2, ale to dalej nie to same, i nie wyjaśnia.

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:16 minut
1

W 1. przypadku wyciągasz metodę z instancji obiektu, a więc this jest już podany. W 2. przypadku wyciągasz metodę niestatyczną prosto z klasy, więc this jest dodany do listy parametrów.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.