Πώς διαφέρουν οι τερματικές και μη τερματικές λειτουργίες στο 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(), που ξεκινά την επεξεργασία και επιστρέφει τη τελική λίστα.