Sortowanie / Java Email

Sortowanie obiektów poprzez przypisanie mechanizmu porównującego obiekt.

Aby obiekty można było sortować w wyjątkowy dla nich sposób należy zdefiniować funkcję porównywującą je do siebie. Jest to istotne aby podczas sortowania było wiadomo, który obiekt jest starszy (wyżej na liście), a który młodszy. Funkcja porównująca zwraca wartość liczbową:

int WYNIK_FUNKCJI = X.compareTo(Y);


gdy:
- WYNIK_FUNKCJI < 0 to obiekt X jest mniejszy od obiektu Y,
- WYNIK_FUNKCJI = 0 to obiekt X jest równy obiektowi Y,
- WYNIK_FUNKCJI > 0 to obiekt X jest większy od obiektu Y.

W praktyce: 

class Osoba implements Comparable<Osoba> {
  private String imie;
  private String nazwisko;
  public int compareTo(Osoba o) {
  int compare = nazwisko.compareTo(o.nazwisko);
  if(compare==0) compare = imie.compareTo(o.imie);
  return compare;
  }
}

Powyższy przykład sortuje po nazwisku a jeżeli spór nie zostanie rozstrzygnięty to bierze pod uwagę imię. W skrócie: sortowanie po nazwisku i imieniu.

 

Sortowanie po wybranych właściwościach obiektu. 

Może się tak zdarzyć że w wyjątkowej sytuacji trzeba posortować listę obiektów po innych własnościach. Jest to możliwe dzięki porównywaczowi (Comparator)

W praktyce:

Collections.sort(tab, new Comparator<Osoba>() {
  public int compare(Osoba a , Osoba b) {
  return a.imie.compareTo(b.imie);
  }
});

gdzie: Osoba jest klasą z poprzedniego przykładu. 

Przykład sortuje tylko po imieniu. 

Zmieniony: Sobota, 28 Listopad 2009 19:52