Sobes.tech
Junior — Middle

Πώς διαφέρουν οι τερματικές και μη τερματικές λειτουργίες στο API Stream όσον αφορά τις λειτουργίες και τον σκοπό τους;

sobes.tech AI

Απάντηση από AI

Στην API Stream, οι τερματικές και μη τερματικές λειτουργίες διαφέρουν ως προς τον σκοπό και τη συμπεριφορά:

  • Μη τερματικές λειτουργίες (intermediate) — είναι λειτουργίες που επιστρέφουν ένα νέο stream και επιτρέπουν την κατασκευή μιας αλυσίδας μετασχηματισμών. Είναι τεμπέλικες, δηλαδή δεν εκτελούνται άμεσα, αλλά μόνο όταν καλείται μια τερματική λειτουργία. Παραδείγματα: filter(), map(), sorted(), distinct().

  • Τερματικές λειτουργίες (terminal) — ολοκληρώνουν την αλυσίδα λειτουργιών και ξεκινούν την επεξεργασία δεδομένων. Επιστρέφουν ένα αποτέλεσμα (π.χ., μια συλλογή, έναν αριθμό, void). Μετά από μια τερματική λειτουργία, το stream θεωρείται κλειστό και δεν μπορεί να χρησιμοποιηθεί ξανά. Παραδείγματα: collect(), forEach(), reduce(), count().

Παράδειγμα:

List<String> result = list.stream()
    .filter(s -> s.startsWith("A"))   // μη τερματικό
    .map(String::toUpperCase)           // μη τερματικό
    .collect(Collectors.toList());     // τερματικό

Εδώ, η φιλτράρισμα και η μετατροπή δεν εκτελούνται άμεσα, αλλά μόνο όταν καλείται το collect(), που ξεκινά την επεξεργασία και επιστρέφει τη τελική λίστα.