Comparator.naturalOrder în Java

Comparator și Optional Java 8 (reverseOrder în Collections: Java 1.2)

naturalOrder() compară obiectele după ordinea lor naturală (crescător); reverseOrder() după ordinea inversă (descrescător).

Sintaxă
static <T extends Comparable<? super T>> Comparator<T> naturalOrder()
static <T extends Comparable<? super T>> Comparator<T> reverseOrder()

Ce face Comparator.naturalOrder

Ordinea „naturală” este cea definită de clasa însăși prin compareTo: numerele crescător, textele alfabetic (după codurile Unicode), datele cronologic. Comparator.naturalOrder() returnează un comparator care folosește această ordine; Comparator.reverseOrder() o inversează.

Sunt utile acolo unde o metodă cere un comparator, dar tu vrei ordinea obișnuită sau inversă: lista.sort(Comparator.reverseOrder()), new TreeMap<>(Comparator.reverseOrder()), sau ca al doilea argument al lui comparing.

Ce returnează

Un comparator pentru ordinea naturală sau inversă.

Exemple

Exemplul 1: Crescător și descrescător

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> punctaje = new ArrayList<>(List.of(72, 95, 87, 60));
        punctaje.sort(Comparator.naturalOrder());
        System.out.println("Crescător: " + punctaje);
        punctaje.sort(Comparator.reverseOrder());
        System.out.println("Descrescător: " + punctaje);
    }
}

Rezultat

Crescător: [60, 72, 87, 95]
Descrescător: [95, 87, 72, 60]

Exemplul 2: Cele mai recente date întâi

import java.time.LocalDate;
import java.util.Comparator;
import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        TreeMap<LocalDate, String> stiri = new TreeMap<>(Comparator.reverseOrder());
        stiri.put(LocalDate.of(2026, 10, 1), "Începe sezonul de teatru la Iași");
        stiri.put(LocalDate.of(2026, 10, 18), "Festivalul de film la Cluj");
        stiri.put(LocalDate.of(2026, 9, 20), "Maraton la București");
        stiri.forEach((zi, titlu) -> System.out.println(zi + "  " + titlu));
    }
}

Rezultat

2026-10-18  Festivalul de film la Cluj
2026-10-01  Începe sezonul de teatru la Iași
2026-09-20  Maraton la București

Greșeli frecvente

  • Folosești naturalOrder pe obiecte care nu sunt Comparable. Nu se compilează; scrie un comparator cu comparing.
  • Te aștepți ca reverseOrder să inverseze ordinea în care au fost adăugate elementele. Inversează ordinea naturală (descrescător); pentru ordinea inversă a listei folosește reversed() pe listă sau Collections.reverse.

Comenzi înrudite

  • Comparator: Interfața care spune cum se ordonează două obiecte: compare(a, b) returnează un număr negativ, zero sau pozitiv.
  • Comparator.thenComparing: thenComparing adaugă un criteriu secundar pentru elementele egale după primul; reversed() inversează un comparator.
  • Collections.sort: Sortează o listă pe loc: crescător după ordinea naturală sau după un Comparator dat. Echivalent cu lista.sort(…).
  • TreeMap: Dicționar care ține cheile mereu sortate și oferă căutări de tip „prima cheie”, „cea mai apropiată cheie”, „intervalul de chei”.