Ce face IntStream.summaryStatistics
Un stream se poate parcurge o singură dată, deci pentru sumă, minim și maxim ai avea nevoie de trei stream-uri. summaryStatistics() le calculează pe toate deodată și returnează un obiect IntSummaryStatistics.
Obiectul are metodele getCount(), getSum(), getMin(), getMax() și getAverage(). Pentru un stream gol, minimul este Integer.MAX_VALUE, maximul Integer.MIN_VALUE, iar media 0, deci verifică getCount() înainte.
Ce returnează
Un obiect IntSummaryStatistics (există și LongSummaryStatistics, DoubleSummaryStatistics).
Exemple
Exemplul 1: Statistica notelor unei grupe
import java.util.IntSummaryStatistics;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntSummaryStatistics s = IntStream.of(9, 7, 10, 5, 8).summaryStatistics();
System.out.println("Note: " + s.getCount());
System.out.println("Suma: " + s.getSum());
System.out.println("Minima: " + s.getMin() + ", maxima: " + s.getMax());
System.out.println("Media: " + s.getAverage());
System.out.println(s);
}
}
Rezultat
Note: 5
Suma: 39
Minima: 5, maxima: 10
Media: 7.8
IntSummaryStatistics{count=5, sum=39, min=5, average=7.800000, max=10}
Exemplul 2: Statistica prețurilor dintr-o listă de produse
Pentru o listă goală valorile sunt „ciudate”, de aceea verificăm întâi getCount().
import java.util.IntSummaryStatistics;
import java.util.List;
public class Main {
record Produs(String nume, int pret) {}
static void raport(List<Produs> produse) {
IntSummaryStatistics s = produse.stream().mapToInt(Produs::pret).summaryStatistics();
if (s.getCount() == 0) {
System.out.println("Nu există produse (min = " + s.getMin() + ")");
return;
}
System.out.printf("%d produse, între %d și %d lei, media %.2f lei%n",
s.getCount(), s.getMin(), s.getMax(), s.getAverage());
}
public static void main(String[] args) {
raport(List.of(new Produs("pâine", 5), new Produs("cafea", 32), new Produs("unt", 11)));
raport(List.of());
}
}
Rezultat
3 produse, între 5 și 32 lei, media 16.00 lei
Nu există produse (min = 2147483647)
Greșeli frecvente
- Creezi trei stream-uri separate pentru sumă, minim și maxim.
summaryStatistics()parcurge datele o singură dată. - Afișezi minimul unei liste goale și primești 2147483647. Verifică
getCount() > 0.
Comenzi înrudite
IntStream.sum: sum adună numerele din IntStream; average dă media lor ca OptionalDouble (gol dacă nu există numere).IntStream.max: Returnează cel mai mare (max) sau cel mai mic (min) număr din IntStream, ca OptionalInt.Collectors.teeing: Trimite fiecare element la doi colectori deodată și unește cele două rezultate cu o funcție, într-o singură parcurgere.Collectors.summingInt: Adună un câmp numeric al elementelor (summingInt) sau îi calculează media (averagingDouble), de obicei pe grupuri.