Ce face IntStream.sum
sum() returnează suma numerelor din stream, de tip int. Pentru un stream gol dă 0. Atenție: dacă suma depășește aproximativ 2,1 miliarde, rezultatul se „întoarce” la valori negative; pentru sume mari folosește asLongStream().sum() sau mapToLong.
average() returnează media aritmetică, de tip OptionalDouble. Este gol pentru un stream fără elemente, ca să nu împarți la zero. Scoți valoarea cu getAsDouble() sau, mai sigur, cu orElse(0).
Ce returnează
sum: un int. average: un OptionalDouble.
Exemple
Exemplul 1: Suma și media notelor
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> note = List.of(9, 7, 10, 8, 6);
int suma = note.stream().mapToInt(Integer::intValue).sum();
double media = note.stream().mapToInt(Integer::intValue).average().orElse(0);
System.out.println("Suma: " + suma);
System.out.println("Media: " + media);
}
}
Rezultat
Suma: 40
Media: 8.0
Exemplul 2: Stream gol și depășirea lui int
Media unui stream gol nu există. Iar trei salarii mari adunate ca int dau un rezultat negativ, greșit.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
System.out.println("Sumă goală: " + IntStream.empty().sum());
System.out.println("Medie goală: " + IntStream.empty().average());
int[] sume = {1_500_000_000, 700_000_000, 400_000_000};
System.out.println("Ca int: " + IntStream.of(sume).sum());
System.out.println("Ca long: " + IntStream.of(sume).asLongStream().sum());
}
}
Rezultat
Sumă goală: 0
Medie goală: OptionalDouble.empty
Ca int: -1694967296
Ca long: 2600000000
Greșeli frecvente
- Apelezi
average().getAsDouble()pe un stream care poate fi gol: primeștiNoSuchElementException. FoloseșteorElse(...). - Aduni numere mari cu
sum()peintși nu observi depășirea. Nu apare nicio eroare, doar un rezultat greșit.
Comenzi înrudite
IntStream: Un stream de numere int simple, cu sum, average, min, max; IntStream.of îl creează direct din valori.IntStream.max: Returnează cel mai mare (max) sau cel mai mic (min) număr din IntStream, ca OptionalInt.IntStream.summaryStatistics: Calculează într-o singură trecere numărul, suma, minimul, maximul și media numerelor din IntStream.Stream.mapToInt: Transformă elementele în numere primitive (int, long, double) și dă acces la sum(), average(), max().Collectors.summingInt: Adună un câmp numeric al elementelor (summingInt) sau îi calculează media (averagingDouble), de obicei pe grupuri.