Sobes.tech
Junior — Middle

Hogyan különböznek a végrehajtási és nem végrehajtási műveletek a Stream API-ban funkcióik és céljaik szerint?

sobes.tech MI

Válasz az MI-től

A Stream API-ban a terminális és nem terminális műveletek célja és viselkedése szerint különböznek:

  • Nem terminális (köztes) műveletek (intermediate) — olyan műveletek, amelyek új streamet adnak vissza, és lehetővé teszik a transzformációk láncolását. Lassan működnek, vagyis nem hajtódnak végre azonnal, csak akkor, amikor egy terminális műveletet hívunk. Példák: filter(), map(), sorted(), distinct().

  • Terminális műveletek (terminal) — befejezik a műveletek láncolását és elindítják az adatok feldolgozását. Eredményt adnak vissza (pl. gyűjtemény, szám, void). A terminális művelet után a stream zártnak tekinthető, és nem lehet újra használni. Példák: collect(), forEach(), reduce(), count().

Példa:

List<String> result = list.stream()
    .filter(s -> s.startsWith("A"))   // nem terminális
    .map(String::toUpperCase)           // nem terminális
    .collect(Collectors.toList());     // terminális

Itt a szűrés és átalakítás nem történik meg azonnal, csak amikor a collect() hívásra kerül, ami elindítja a feldolgozást és visszaadja a végső listát.