Ce face Comparable
O clasă care implementează Comparable<T> spune că obiectele ei pot fi ordonate. Metoda a.compareTo(b) returnează un număr negativ dacă a vine înaintea lui b, zero dacă sunt la egalitate și pozitiv dacă a vine după. Contează doar semnul, nu valoarea exactă.
int, double, String, DateTime, Duration și BigInt sunt deja Comparable. De aceea lista.sort() fără argument funcționează pentru ele. Pentru clasele tale implementezi interfața și sort() le ordonează la fel.
Textele se compară după codurile caracterelor: literele mari vin înaintea celor mici, iar literele cu diacritice (ă, ș) vin după z. Pentru ordine alfabetică românească corectă ai nevoie de o comparație proprie sau de pachetul intl.
Parametri
| Parametru | Descriere |
|---|---|
other |
Obiectul cu care se compară. |
Ce returnează
Un int: negativ, 0 sau pozitiv.
Exemple
Exemplul 1: compareTo pe tipurile de bază
void main() {
print(3.compareTo(7));
print(7.compareTo(7));
print('Brașov'.compareTo('Arad'));
print('ana'.compareTo('Bogdan') > 0);
print(DateTime(2026, 1, 1).compareTo(DateTime(2025, 12, 31)));
var orase = ['Iași', 'arad', 'Cluj', 'Brașov'];
orase.sort();
print(orase);
}
Rezultat
-1
0
1
true
1
[Brașov, Cluj, Iași, arad]
Exemplul 2: O clasă cu ordine naturală
Elevii se ordonează descrescător după medie, iar la egalitate alfabetic după nume.
class Elev implements Comparable<Elev> {
final String nume;
final double medie;
Elev(this.nume, this.medie);
@override
int compareTo(Elev other) {
var dupaMedie = other.medie.compareTo(medie);
return dupaMedie != 0 ? dupaMedie : nume.compareTo(other.nume);
}
@override
String toString() => '$nume ($medie)';
}
void main() {
var clasa = [Elev('Mihai', 8.5), Elev('Ana', 9.75), Elev('Ioana', 8.5), Elev('Radu', 10)];
clasa.sort();
print(clasa);
print(clasa.first.compareTo(clasa.last) < 0);
}
Rezultat
[Radu (10.0), Ana (9.75), Ioana (8.5), Mihai (8.5)]
true
Greșeli frecvente
- Verifici
a.compareTo(b) == -1. Rezultatul poate fi orice număr negativ; scrie< 0. - Te aștepți ca
sort()pe texte să pună „arad” lângă „Arad”. Literele mari vin înaintea tuturor celor mici; compară cutoLowerCase().
Comenzi înrudite
Comparable.compare: Funcție statică ce compară două valori Comparable: același rezultat ca a.compareTo(b), dar se poate da ca argument.List.sort: Sortează lista pe loc, crescător sau după o funcție de comparare.DateTime.isBefore: Compară două date: este înainte (isBefore), după (isAfter) sau exact în același moment (isAtSameMomentAs)?int.clamp: clamp ține un număr între două limite; compareTo compară două numere și dă −1, 0 sau 1.