Sobes.tech
Junior — Middle

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šą.