Ce face Stream.builder
Stream.builder() îți dă un obiect Stream.Builder în care adaugi elemente unul câte unul, cu add(x) (care se poate înlănțui) sau cu accept(x). La final, build() produce stream-ul.
Este util când elementele apar treptat, de exemplu în urma unor condiții, și nu vrei să creezi o listă intermediară doar ca să faci apoi lista.stream().
După build() nu mai poți adăuga nimic: un nou add aruncă IllegalStateException.
Ce returnează
builder() returnează un Stream.Builder<T>; build() returnează stream-ul cu elementele adăugate, în ordinea adăugării.
Exemple
Exemplul 1: Elemente adăugate în lanț
Tipul elementelor se scrie la apel: Stream.<String>builder().
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream<String> zile = Stream.<String>builder()
.add("luni")
.add("marți")
.add("miercuri")
.build();
zile.forEach(System.out::println);
}
}
Rezultat
luni
marți
miercuri
Exemplul 2: Elemente adăugate după o condiție
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
int varsta = 19;
boolean areCarnet = true;
Stream.Builder<String> acte = Stream.builder();
acte.add("buletin");
if (varsta >= 18) {
acte.add("cazier");
}
if (areCarnet) {
acte.accept("permis de conducere");
}
System.out.println(acte.build().toList());
}
}
Rezultat
[buletin, cazier, permis de conducere]
Greșeli frecvente
- Apelezi
adddupăbuild(). Builder-ul este închis și aruncăIllegalStateException. - Folosești builder-ul când ai deja toate valorile.
Stream.of(a, b, c)este mai scurt.
Comenzi înrudite
Stream.of: Creează un stream direct din câteva valori; ofNullable face un stream gol pentru null, iar empty un stream fără elemente.Stream.concat: Lipește două stream-uri: întâi toate elementele primului, apoi pe ale celui de-al doilea.Stream: Un șir de valori prelucrate pas cu pas: filtrezi, transformi, sortezi și aduni rezultatul, fără bucle scrise de mână.