Ce face Collectors.counting
Collectors.counting() numără elementele și dă un Long. Singur, collect(Collectors.counting()) face același lucru ca count(), care este mai scurt.
Locul lui adevărat este ca downstream în groupingBy sau partitioningBy: groupingBy(Student::oras, Collectors.counting()) dă câți studenți are fiecare oraș. Rezultatul este un map cu valori Long, nu Integer.
Ce returnează
Un Collector care produce numărul de elemente, de tip Long.
Exemple
Exemplul 1: Câte cuvinte de fiecare fel
Numărăm de câte ori apare fiecare cuvânt dintr-o propoziție. TreeMap::new sortează cuvintele.
import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;
import java.util.function.Function;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
String text = "ana are mere ana are pere ana are prune";
Map<String, Long> frecventa = Arrays.stream(text.split(" "))
.collect(Collectors.groupingBy(Function.identity(), TreeMap::new, Collectors.counting()));
System.out.println(frecventa);
}
}
Rezultat
{ana=3, are=3, mere=1, pere=1, prune=1}
Exemplul 2: counting singur și în partitioningBy
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> note = List.of(9, 4, 7, 10, 3, 8);
long toate = note.stream().collect(Collectors.counting());
System.out.println("Note: " + toate);
Map<Boolean, Long> trecuti = note.stream()
.collect(Collectors.partitioningBy(n -> n >= 5, Collectors.counting()));
System.out.println("Promovați: " + trecuti.get(true) + ", nepromovați: " + trecuti.get(false));
}
}
Rezultat
Note: 6
Promovați: 4, nepromovați: 2
Greșeli frecvente
- Declari rezultatul ca
Map<String, Integer>.counting()dăLong; scrieMap<String, Long>. - Folosești
collect(Collectors.counting())fără grupare.count()e mai simplu și mai rapid.
Comenzi înrudite
Collectors.groupingBy: Împarte elementele în grupuri după o cheie (oraș, grupă, prima literă) și dă un Map cheie → listă sau cheie → rezultat.Stream.count: Returnează numărul de elemente din stream, de tip long.Collectors.summingInt: Adună un câmp numeric al elementelor (summingInt) sau îi calculează media (averagingDouble), de obicei pe grupuri.Collectors.partitioningBy: Împarte elementele în două grupuri, după o condiție: cele care o îndeplinesc (true) și celelalte (false).