Ce face Objects.compare
Objects.compare(a, b, comparator) returnează 0 dacă a == b (același obiect sau ambele null) și comparator.compare(a, b) în rest. Rezultatul are sensul obișnuit: negativ dacă a vine înainte, pozitiv dacă vine după.
Metoda nu tratează singură cazul în care doar unul este null: decizia rămâne la comparator. Dacă valorile pot lipsi, folosește un comparator ca Comparator.nullsFirst(...) sau nullsLast(...).
Parametri
| Parametru | Descriere |
|---|---|
a, b |
Obiectele comparate. |
c |
Comparatorul folosit. |
Ce returnează
Un int: negativ, 0 sau pozitiv.
Exemple
Exemplul 1: Comparare cu ordine naturală și inversă
import java.util.Comparator;
import java.util.Objects;
public class Main {
public static void main(String[] args) {
System.out.println(Objects.compare("Ana", "Ion", Comparator.naturalOrder()));
System.out.println(Objects.compare("Ana", "Ion", Comparator.reverseOrder()));
System.out.println(Objects.compare(null, null, Comparator.<String>naturalOrder()));
}
}
Rezultat
-8
8
0
Exemplul 2: Valori care pot lipsi
Cu nullsLast, un oraș necunoscut ajunge după cele cunoscute.
import java.util.Comparator;
import java.util.Objects;
public class Main {
public static void main(String[] args) {
Comparator<String> cmp = Comparator.nullsLast(Comparator.naturalOrder());
String[][] perechi = {{"Iași", "Cluj"}, {null, "Arad"}, {"Arad", null}};
for (String[] p : perechi) {
System.out.println(p[0] + " vs " + p[1] + ": " + Objects.compare(p[0], p[1], cmp));
}
}
}
Rezultat
Iași vs Cluj: 6
null vs Arad: 1
Arad vs null: -1
Greșeli frecvente
- Crezi că
Objects.comparete protejează denullcaObjects.equals: dacă doar unul estenullși comparatorul nu îl tratează, primeștiNullPointerException.
Comenzi înrudite
Comparatori (Comparable și Comparator): Comparable dă ordinea naturală a unei clase (compareTo); Comparator descrie orice altă ordine și se combină cu comparing, thenComparing și reversed.Integer.compare: compare() compară două int-uri (negativ, 0, pozitiv); max, min și sum sunt variante scurte pentru referințe la metode.String.compareTo: Compară două șiruri în ordine lexicografică: rezultat negativ, zero sau pozitiv; variante fără litere mari/mici.Objects: Clasa java.util.Objects are metode statice care lucrează sigur cu null; equals() compară două obiecte care pot fi null.