Sobes.tech
Junior — Middle

Hoe verschillen terminale en niet-terminale bewerkingen in de Stream API qua functies en doeleinden?

sobes.tech AI

Antwoord van AI

In de Stream API verschillen terminale en niet-terminale operaties qua doel en gedrag:

  • Niet-terminale operaties (intermediate) — dit zijn operaties die een nieuwe stream teruggeven en het mogelijk maken om een keten van transformaties op te bouwen. Ze zijn lui, dat wil zeggen, ze worden niet meteen uitgevoerd, maar alleen wanneer een terminale operatie wordt aangeroepen. Voorbeelden: filter(), map(), sorted(), distinct().

  • Terminale operaties (terminal) — beëindigen de keten van operaties en starten de gegevensverwerking. Ze geven een resultaat terug (bijvoorbeeld, een collectie, een getal, void). Na een terminale operatie wordt de stream als gesloten beschouwd en kan niet opnieuw worden gebruikt. Voorbeelden: collect(), forEach(), reduce(), count().

Voorbeeld:

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

Hier worden filtering en transformatie niet meteen uitgevoerd, maar alleen wanneer collect() wordt aangeroepen, die de verwerking start en de uiteindelijke lijst retourneert.