Ce face Collections.sort
Collections.sort(lista) rearanjează elementele listei în ordine crescătoare: numerele de la mic la mare, textele alfabetic (după codurile Unicode). Lista însăși se modifică; metoda nu returnează nimic.
Cu al doilea argument dai regula de ordonare: Collections.sort(lista, Comparator.reverseOrder()) sau Comparator.comparing(Elev::nume). Sortarea este stabilă: elementele egale își păstrează ordinea relativă, deci poți sorta în mai mulți pași.
Din Java 8 poți scrie la fel de bine lista.sort(comparator) (cu null pentru ordinea naturală); Collections.sort o apelează în spate. Lista trebuie să fie modificabilă.
Parametri
| Parametru | Descriere |
|---|---|
list |
Lista de sortat (modificabilă). |
c |
Comparatorul; dacă lipsește, elementele trebuie să fie Comparable. |
Ce returnează
Nimic (void); lista este sortată pe loc.
Exemple
Exemplul 1: Nume și note sortate
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> nume = new ArrayList<>(List.of("Radu", "Ana", "Elena", "Bogdan"));
Collections.sort(nume);
System.out.println(nume);
List<Integer> note = new ArrayList<>(List.of(7, 10, 5, 9));
Collections.sort(note, Comparator.reverseOrder());
System.out.println(note);
}
}
Rezultat
[Ana, Bogdan, Elena, Radu]
[10, 9, 7, 5]
Exemplul 2: Sortarea unor obiecte după mai multe criterii
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Main {
record Produs(String nume, String categorie, double pret) {}
public static void main(String[] args) {
List<Produs> produse = new ArrayList<>(List.of(
new Produs("lapte", "lactate", 8.5),
new Produs("pâine", "panificație", 5.0),
new Produs("brânză", "lactate", 32.0),
new Produs("covrig", "panificație", 2.5)));
Collections.sort(produse, Comparator.comparing(Produs::categorie).thenComparingDouble(Produs::pret));
for (Produs p : produse) {
System.out.println(p.categorie() + " | " + p.nume() + " | " + p.pret() + " lei");
}
}
}
Rezultat
lactate | lapte | 8.5 lei
lactate | brânză | 32.0 lei
panificație | covrig | 2.5 lei
panificație | pâine | 5.0 lei
Greșeli frecvente
- Scrii
lista = Collections.sort(lista);. Metoda returneazăvoid; nu atribui rezultatul. - Sortezi o listă creată cu
List.of. ApareUnsupportedOperationException; copiaz-o înnew ArrayList<>(...). - Sortezi textele românești și te miri că „Ștefan” vine după „Zoe”. Ordinea implicită folosește codurile caracterelor; pentru ordinea limbii folosește
java.text.Collator.getInstance(Locale.of("ro"))ca comparator.
Comenzi înrudite
List.sort: Sortează lista pe loc după comparatorul dat; cu null sortează în ordinea naturală (numere crescător, texte alfabetic).Arrays.sort: Sortează pe loc un array: crescător pentru numere și texte sau după un Comparator pentru array-uri de obiecte.Comparator: Interfața care spune cum se ordonează două obiecte: compare(a, b) returnează un număr negativ, zero sau pozitiv.Comparator.comparing: Construiește un comparator care ordonează obiectele după o proprietate: comparing(Elev::nume), comparingInt(Elev::varsta).Collections.reverse: reverse inversează pe loc ordinea elementelor unei liste; swap schimbă între ele elementele de pe două poziții.Collections.binarySearch: Caută rapid o valoare într-o listă sortată, prin înjumătățiri. Returnează poziția sau un număr negativ care arată unde ar trebui inserată.