User Tools

Site Tools


java:streams

JAVA Streams (java.util.stream)

Ο όρος Java Streams (Stream API) αναφέρεται σε μια αφαιρετική προγραμματιστική δομή που εισήχθη στη Java 8 για την επεξεργασία ακολουθιών από δεδομένα. Πρόκειται για ένα αγωγό (pipeline) υπολογιστικών λειτουργιών που εφαρμόζεται πάνω σε μια πηγή δεδομένων (όπως μια λίστα ή ένας πίνακας). Ο αγωγός αυτός επιτρέπει τον μετασχηματισμό και το φιλτράρισμα των στοιχείων χωρίς να τροποποιεί την αρχική πηγή. Ένα Java Stream δεν έχει καμία σχέση με τις ροές δεδομένων (Ι/Ο Streams) ή με δομές δεδομένων (java.util.Collection ή java.util.Map).

Δύο βασικά χαρακτηριστικά των Streams είναι τα εξής:

  • Δεν αποθηκεύει δεδομένα. Το Stream δεν είναι δομή αποθήκευσης, απλά επεξεργάζεται τα δεδομένα από μια πηγή (Collection, Array, String) μέσω ενός αγωγού λειτουργιών.
  • Οι λειτουργίες σε ένα Stream παράγουν ένα αποτέλεσμα, αλλά δεν τροποποιούν την πηγή τους. Για παράδειγμα, το φιλτράρισμα μιας λίστας επιστρέφει ένα νέο Stream χωρίς να διαγράφει στοιχεία από την αρχική λίστα.

Κάθε Stream ακολουθεί την εξής ροή:

  • Source (Πηγή): Από πού έρχονται τα δεδομένα; (π.χ. myList.stream())
  • Intermediate Operations (Ενδιάμεσες λειτουργίες): Τι αλλαγές θέλουμε να κάνουμε; (π.χ. φιλτράρισμα, μετασχηματισμό, ταξινόμηση, άθροιση)
  • Terminal Operation (Τερματική λειτουργία): Πού καταλήγουν τα δεδομένα που προκύπτουν από το Stream (π.χ. δημιουργία νέας λίστας, εκτύπωση σε αρχείο).

Περιγράφονται από το interface java.util.stream.Stream το οποίο περιγράφει την παραπάνω ροή.

Βασικές Μέθοδοι

Πηγές εισόδου ενός Stream

Το Stream API είναι εξαιρετικά ευέλικτο. Μπορεί να δημιουργηθεί ένα Stream από σχεδόν οποιαδήποτε πηγή δεδομένων. Κυριότερες πηγές είναι οι παρακάτω:

  • Από κάθε κλάση που υλοποιεί το interface java.util.Collection (όπως List, Set, Queue) διαθέτει την έτοιμη μέθοδο .stream().
    • List<Τ>(myList.stream()): Δημιουργεί ένα stream με αντικείμενα τύπου T από τα περιεχόμενα της λίστας.
    • Set(mySet.stream()): Δημιουργεί ένα stream με αντικείμενα τύπου T από τα περιεχόμενα του set.
  • Από οποιονδήποτε πίνακα με χρήση της κλάσης java.util.Arrays: Η κλήση Arrays.stream(myArray) δημιουργεί ένα stream από αντικείμενα ή βασικούς τύπους (int, long, double) που περιέχονται στον πινακα myArray.
  • Από Αρχεία και I/O operations
    • Files.lines(Path): Η κλάση java.nio.file.Files, μέσω της μεθόδου lines, μετατρέπει κάθε γραμμή ενός αρχείου σε στοιχείο του stream.
    • java.io.BufferedReader: Η μέθοδος lines() επιστρέφει ένα stream από java.util.String με τις γραμμές του κειμένου, όπως αυτές διαβάζονται από την κλάση BufferedReader. Μέσω της κλάσης αυτής μπορούμε να διαβάσουμε από αρχείο, αλλά και από άλλες πηγές όπως μία σύνδεση στο διαδίκτυο.

Ενδιάμεσες λειτουργίες

java/streams.txt · Last modified: 2026/05/21 19:27 by gthanos