Collections.max în Java

Returnează cel mai mare (max) sau cel mai mic (min) element dintr-o colecție, după ordinea naturală sau după un Comparator.

Sintaxă
static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp)
static <T> T min(...)   // la fel

Ce face Collections.max

Collections.max(colectie) parcurge toate elementele și îl returnează pe cel mai mare; Collections.min pe cel mai mic. Merge pe orice colecție: listă, mulțime, coadă.

Cu un Comparator alegi ce înseamnă „mare”: Collections.max(elevi, Comparator.comparingDouble(Elev::medie)) dă elevul cu media cea mai mare. Pe o colecție goală, ambele aruncă NoSuchElementException.

Parametri

Parametru Descriere
coll Colecția (nevidă).
comp Comparatorul folosit pentru comparare.

Ce returnează

Elementul maxim sau minim.

Exemple

Exemplul 1: Cea mai mare și cea mai mică temperatură

import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> temp = List.of(18, 23, 15, 27, 21);
        System.out.println("Max: " + Collections.max(temp));
        System.out.println("Min: " + Collections.min(temp));
        List<String> orase = List.of("Iași", "Arad", "Constanța");
        System.out.println("Ultimul alfabetic: " + Collections.max(orase));
    }
}

Rezultat

Max: 27
Min: 15
Ultimul alfabetic: Iași

Exemplul 2: Elevul cu media cea mai mare

import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.NoSuchElementException;

public class Main {
    record Elev(String nume, double medie) {}

    public static void main(String[] args) {
        List<Elev> elevi = List.of(new Elev("Ana", 9.2), new Elev("Radu", 9.7), new Elev("Elena", 8.9));
        Comparator<Elev> dupaMedie = Comparator.comparingDouble(Elev::medie);
        System.out.println("Premiul I: " + Collections.max(elevi, dupaMedie).nume());
        System.out.println("Media cea mai mică: " + Collections.min(elevi, dupaMedie));
        System.out.println("Cel mai lung nume: " + Collections.max(elevi, Comparator.comparingInt(e -> e.nume().length())).nume());
        try {
            Collections.max(List.<Integer>of());
        } catch (NoSuchElementException e) {
            System.out.println("Pe listă goală: NoSuchElementException");
        }
    }
}

Rezultat

Premiul I: Radu
Media cea mai mică: Elev[nume=Elena, medie=8.9]
Cel mai lung nume: Elena
Pe listă goală: NoSuchElementException

Greșeli frecvente

  • Apelezi max pe o colecție care poate fi goală. Verifică isEmpty() sau folosește stream().max(...), care returnează un Optional.
  • Când mai multe elemente sunt egale cu maximul, aștepți ultimul. max îl returnează pe primul găsit.

Comenzi înrudite

  • Collections.frequency: Numără de câte ori apare o valoare într-o colecție, comparând cu equals.
  • TreeSet.first: first() returnează cel mai mic element al unui TreeSet, last() pe cel mai mare. Aruncă excepție dacă mulțimea e goală.
  • Stream.min / Stream.max: Găsesc cel mai mic și cel mai mare element după un Comparator; rezultatul este un Optional.
  • Comparator.comparing: Construiește un comparator care ordonează obiectele după o proprietate: comparing(Elev::nume), comparingInt(Elev::varsta).
  • Collections: Clasă cu metode statice gata făcute pentru colecții: sortare, amestecare, minim și maxim, numărare, liste nemodificabile.