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.