Ce face Stream.of
Stream.of(a, b, c) creează un stream din valorile date, în ordinea în care le scrii. Este cel mai scurt mod de a începe un stream când nu ai deja o colecție. Poți da și un tablou: Stream.of(tablou).
Stream.ofNullable(x) creează un stream cu un singur element dacă x nu este null și un stream gol dacă este. Este util în flatMap, ca să sari peste valorile lipsă.
Stream.empty() returnează un stream fără niciun element. Îl folosești când o metodă trebuie să returneze un stream, dar nu are nimic de dat (mai bine decât null).
Parametri
| Parametru | Descriere |
|---|---|
valori |
Elementele stream-ului, separate prin virgulă, sau un tablou de tip T[]. |
valoare |
Pentru ofNullable: o valoare care poate fi null. |
Ce returnează
Un Stream<T> secvențial și ordonat cu elementele date (gol pentru empty() sau ofNullable(null)).
Exemple
Exemplul 1: Stream din valori și din tablou
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream.of("Ana", "Mihai", "Elena")
.map(n -> "Salut, " + n + "!")
.forEach(System.out::println);
String[] judete = {"Iași", "Cluj", "Dolj"};
System.out.println(Stream.of(judete).toList());
System.out.println(Stream.of(42).toList());
}
}
Rezultat
Salut, Ana!
Salut, Mihai!
Salut, Elena!
[Iași, Cluj, Dolj]
[42]
Exemplul 2: ofNullable: sari peste valorile lipsă
Unii studenți nu au e-mail (null). Cu flatMap(Stream::ofNullable) rămân doar adresele existente.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
List<String> emailuri = Arrays.asList("ana@exemplu.ro", null, "radu@exemplu.ro", null);
List<String> existente = emailuri.stream()
.flatMap(Stream::ofNullable)
.toList();
System.out.println(existente);
System.out.println(Stream.ofNullable(null).count());
System.out.println(Stream.ofNullable("Cluj").count());
}
}
Rezultat
[ana@exemplu.ro, radu@exemplu.ro]
0
1
Exemplul 3: empty: o metodă care nu returnează null
Metoda cursuri returnează un stream gol pentru un student necunoscut. Codul care o apelează funcționează la fel în ambele cazuri.
import java.util.stream.Stream;
public class Main {
static Stream<String> cursuri(String student) {
if (student.equals("Ana")) {
return Stream.of("Matematică", "Informatică");
}
return Stream.empty();
}
public static void main(String[] args) {
System.out.println("Ana: " + cursuri("Ana").toList());
System.out.println("Dan: " + cursuri("Dan").toList());
System.out.println("Câte pentru Dan: " + cursuri("Dan").count());
}
}
Rezultat
Ana: [Matematică, Informatică]
Dan: []
Câte pentru Dan: 0
Greșeli frecvente
- Scrii
Stream.of(tablouDeInt)cu unint[]. Obții unStream<int[]>cu un singur element (tabloul întreg). Pentru tablouri de numere primitive foloseșteIntStream.of(...)sauArrays.stream(...). - Folosești
Stream.of(x)cândxpoate finull. Stream-ul va conține elementulnullși vei primiNullPointerExceptionmai târziu. FoloseșteStream.ofNullable(x).
Comenzi înrudite
Stream: Un șir de valori prelucrate pas cu pas: filtrezi, transformi, sortezi și aduni rezultatul, fără bucle scrise de mână.Stream.builder: Construiește un stream element cu element, cu add(), și îl închide cu build().Stream.concat: Lipește două stream-uri: întâi toate elementele primului, apoi pe ale celui de-al doilea.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.range: Creează șirul de numere întregi dintre două limite: range fără ultima valoare, rangeClosed cu ea inclusă.Stream.flatMap: Transformă fiecare element într-un stream și lipește toate aceste stream-uri într-unul singur.