Ce face IntStream.range
IntStream.range(0, 5) dă numerele 0, 1, 2, 3, 4: începutul este inclus, sfârșitul nu. Este echivalentul lui for (int i = 0; i < 5; i++) și se potrivește cu indicii unei liste: range(0, lista.size()).
IntStream.rangeClosed(1, 5) include și ultima valoare: 1, 2, 3, 4, 5. Este potrivit pentru numărări „de la 1 la n”. Dacă începutul este mai mare decât sfârșitul, stream-ul este gol (nu numără înapoi).
Parametri
| Parametru | Descriere |
|---|---|
start |
Primul număr (inclus). |
sfarsitExclus / sfarsitInclus |
Ultima limită: exclusă la range, inclusă la rangeClosed. |
Ce returnează
Un IntStream ordonat, crescător cu pasul 1.
Exemple
Exemplul 1: range față de rangeClosed
import java.util.Arrays;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
System.out.println(Arrays.toString(IntStream.range(0, 5).toArray()));
System.out.println(Arrays.toString(IntStream.rangeClosed(1, 5).toArray()));
System.out.println("Suma 1..100 = " + IntStream.rangeClosed(1, 100).sum());
System.out.println("Invers (gol): " + IntStream.range(5, 0).count());
}
}
Rezultat
[0, 1, 2, 3, 4]
[1, 2, 3, 4, 5]
Suma 1..100 = 5050
Invers (gol): 0
Exemplul 2: Indici pentru o listă
Cu range(0, size()) avem acces la poziție, ca să numerotăm clasamentul.
import java.util.List;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
List<String> clasament = List.of("Ioana", "Ana", "Radu");
IntStream.range(0, clasament.size())
.mapToObj(i -> (i + 1) + ". " + clasament.get(i))
.forEach(System.out::println);
}
}
Rezultat
1. Ioana
2. Ana
3. Radu
Exemplul 3: Tabla înmulțirii cu 7
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.rangeClosed(1, 5)
.forEach(i -> System.out.println("7 x " + i + " = " + 7 * i));
}
}
Rezultat
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
Greșeli frecvente
- Folosești
range(1, 10)și te aștepți să apară 10. Pentru limita inclusă scrierangeClosed(1, 10). - Încerci să numeri înapoi cu
range(10, 0): stream-ul e gol. Foloseștemap(i -> 10 - i)sauIntStream.iterate(10, i -> i > 0, i -> i - 1).
Comenzi înrudite
IntStream: Un stream de numere int simple, cu sum, average, min, max; IntStream.of îl creează direct din valori.for: Bucla clasică cu contor: inițializare, condiție verificată înaintea fiecărui pas și actualizare după fiecare pas.Stream.iterate: Creează un stream din formule: iterate pornește de la o valoare și aplică un pas, generate cere fiecare valoare unui Supplier.IntStream.mapToObj: Trece de la numere int la obiecte: mapToObj transformă fiecare număr într-un obiect, boxed îl împachetează în Integer.