Ce face Comparable.compare
Comparable.compare(a, b) returnează a.compareTo(b). Avantajul este că, fiind o funcție statică, o poți trimite direct ca valoare acolo unde se cere o funcție de comparare: lista.sort(Comparable.compare).
Este utilă în cod generic, de exemplu pentru un comparator implicit într-o clasă de colecție proprie, sau pentru a inversa o ordine: (a, b) => Comparable.compare(b, a).
Parametri
| Parametru | Descriere |
|---|---|
a, b |
Valorile comparate, ambele Comparable. |
Ce returnează
Un int: negativ, 0 sau pozitiv.
Exemple
Exemplul 1: Comparator dat ca argument
void main() {
var note = [7, 10, 5, 9];
note.sort(Comparable.compare);
print(note);
note.sort((a, b) => Comparable.compare(b, a));
print(note);
print(Comparable.compare('Iași', 'Cluj'));
print(Comparable.compare(2.5, 2.5));
}
Rezultat
[5, 7, 9, 10]
[10, 9, 7, 5]
1
0
Exemplul 2: Un clasament generic
List<T> primele<T extends Comparable<Object>>(List<T> valori, int n, {int Function(T, T) cmp = Comparable.compare}) {
var copie = [...valori]..sort(cmp);
return copie.take(n).toList();
}
void main() {
print(primele([42, 7, 19, 3, 25], 3));
print(primele(['Vaslui', 'Arad', 'Iași', 'Bacău'], 2));
print(primele([42, 7, 19, 3, 25], 2, cmp: (a, b) => b.compareTo(a)));
}
Rezultat
[3, 7, 19]
[Arad, Bacău]
[42, 25]
Greșeli frecvente
- Apelezi
Comparable.comparecu valori de tipuri diferite ('5'și5): compilează, dar aruncă eroare la rulare.
Comenzi înrudite
Comparable: Interfața pentru obiecte care au o ordine naturală; compareTo dă negativ, zero sau pozitiv.List.sort: Sortează lista pe loc, crescător sau după o funcție de comparare.