Kaip skiriasi terminalinės ir neterminalinės operacijos Stream API pagal jų funkcijas ir paskirtį?
sobes.tech AI
Atsakymas iš AI
Stream API terminalinės ir ne terminalinės operacijos skiriasi pagal tikslą ir elgseną:
-
Ne terminalinės (intermediate) — tai operacijos, kurios grąžina naują srautą ir leidžia kurti transformacijų grandinę. Jos yra tingios, tai yra, jos nevykdomos iš karto, o tik iškvietus terminalinę operaciją. Pavyzdžiai:
filter(),map(),sorted(),distinct(). -
Terminalinės (terminal) — užbaigia operacijų grandinę ir pradeda duomenų apdorojimą. Jos grąžina rezultatą (pvz., kolekciją, skaičių, void). Po terminalinės operacijos srautas laikomas uždarytu ir jo naudoti nebegalima. Pavyzdžiai:
collect(),forEach(),reduce(),count().
Pavyzdys:
List<String> result = list.stream()
.filter(s -> s.startsWith("A")) // ne terminalinė
.map(String::toUpperCase) // ne terminalinė
.collect(Collectors.toList()); // terminalinė
Čia filtravimas ir transformacija nevykdomi iš karto, o tik iškvietus collect(), kuris pradeda apdorojimą ir grąžina galutinį sąrašą.