Ce face IntStream
IntStream este varianta de Stream pentru numere int. Numerele nu sunt împachetate în obiecte Integer, deci calculele sunt mai rapide, iar interfața are metode în plus: sum(), average(), min(), max(), summaryStatistics().
Obții un IntStream cu IntStream.of(5, 8, 10), cu IntStream.range(0, 10), din tablouri cu Arrays.stream(int[]) sau din alt stream cu mapToInt(...). Literele unui text dau un IntStream prin text.chars().
Pentru long și double există LongStream și DoubleStream, cu aceleași metode. Înapoi la Stream<Integer> treci cu boxed() sau mapToObj(...).
Parametri
| Parametru | Descriere |
|---|---|
valori |
Pentru of: numerele, separate prin virgulă, sau un tablou int[]. |
Ce returnează
IntStream.of returnează un IntStream cu valorile date, în ordine.
Exemple
Exemplul 1: IntStream.of și operațiile pe numere
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
System.out.println("Suma notelor: " + IntStream.of(9, 7, 10, 8).sum());
System.out.println("Nota maximă: " + IntStream.of(9, 7, 10, 8).max().getAsInt());
int[] pare = IntStream.of(3, 8, 5, 12, 6).filter(n -> n % 2 == 0).toArray();
System.out.println("Pare: " + pare.length + " numere, primul " + pare[0]);
}
}
Rezultat
Suma notelor: 34
Nota maximă: 10
Pare: 3 numere, primul 8
Exemplul 2: De unde mai vin IntStream-uri
Dintr-un tablou, dintr-o listă de obiecte cu mapToInt și din literele unui text cu chars().
import java.util.Arrays;
import java.util.List;
public class Main {
record Produs(String nume, int pret) {}
public static void main(String[] args) {
int[] varste = {21, 34, 19, 45};
System.out.println("Vârsta medie: " + Arrays.stream(varste).average().orElse(0));
List<Produs> cos = List.of(new Produs("pâine", 5), new Produs("cafea", 32));
System.out.println("Total coș: " + cos.stream().mapToInt(Produs::pret).sum() + " lei");
long vocale = "Bucuresti".chars().filter(c -> "aeiouAEIOU".indexOf(c) >= 0).count();
System.out.println("Vocale: " + vocale);
}
}
Rezultat
Vârsta medie: 29.75
Total coș: 37 lei
Vocale: 4
Greșeli frecvente
- Folosești
Stream<Integer>și cauțisum(). Nu există peStream; treci laIntStreamcumapToInt(Integer::intValue). - Scrii
Stream.of(tablouInt)pentru unint[]: primești un stream cu un singur element (tabloul). FoloseșteIntStream.of(tablou)sauArrays.stream(tablou).
Comenzi înrudite
IntStream.range: Creează șirul de numere întregi dintre două limite: range fără ultima valoare, rangeClosed cu ea inclusă.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.Stream.mapToInt: Transformă elementele în numere primitive (int, long, double) și dă acces la sum(), average(), max().IntStream.mapToObj: Trece de la numere int la obiecte: mapToObj transformă fiecare număr într-un obiect, boxed îl împachetează în Integer.