Collections.frequency în Java

Numără de câte ori apare o valoare într-o colecție, comparând cu equals.

Sintaxă
static int frequency(Collection<?> c, Object o)

Ce face Collections.frequency

Collections.frequency(colectie, valoare) parcurge colecția și numără elementele egale (cu equals) cu valoare. Poți număra și null-uri.

Pentru o singură valoare este cea mai simplă soluție. Dacă vrei să numeri toate valorile, nu o apela pentru fiecare valoare (ar parcurge colecția de multe ori): construiește un map cu merge(v, 1, Integer::sum).

Parametri

Parametru Descriere
c Colecția în care se numără.
o Valoarea căutată.

Ce returnează

Numărul de apariții (int), 0 dacă nu apare.

Exemple

Exemplul 1: Câți elevi au luat 10?

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

public class Main {
    public static void main(String[] args) {
        List<Integer> note = List.of(10, 8, 10, 7, 9, 10, 5);
        System.out.println("Note de 10: " + Collections.frequency(note, 10));
        System.out.println("Note de 6: " + Collections.frequency(note, 6));
    }
}

Rezultat

Note de 10: 3
Note de 6: 0

Exemplul 2: Apariția unui cuvânt într-un text

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

public class Main {
    public static void main(String[] args) {
        String text = "Ana are mere. Ana vinde mere și pere. Radu cumpără mere de la Ana.";
        List<String> cuvinte = Arrays.asList(text.replaceAll("[.,]", "").split(" "));
        for (String c : List.of("Ana", "mere", "pere", "prune")) {
            System.out.println(c + ": " + Collections.frequency(cuvinte, c));
        }
    }
}

Rezultat

Ana: 3
mere: 3
pere: 1
prune: 0

Greșeli frecvente

  • Numeri un int într-o List<Long>: frequency(lista, 5) caută un Integer, care nu este egal cu un Long, deci rezultatul e 0. Scrie 5L.
  • Apelezi frequency într-o buclă pentru fiecare valoare pe date mari. Folosește un map de contoare.

Comenzi înrudite

  • Map.merge: Pune valoarea dacă cheia lipsește; dacă există, combină valoarea veche cu cea nouă (de exemplu le adună). Ideal pentru numărători și totaluri.
  • Collections.max: Returnează cel mai mare (max) sau cel mai mic (min) element dintr-o colecție, după ordinea naturală sau după un Comparator.
  • List.contains: Verifică dacă lista conține o valoare (contains) sau toate valorile altei colecții (containsAll).
  • Collections: Clasă cu metode statice gata făcute pentru colecții: sortare, amestecare, minim și maxim, numărare, liste nemodificabile.