Middle
Java ning yangi versiyasida nima uchun oqimlar ishlatiladi?
sobes.tech AI
AIdan javob
Java'nın yeni versiyalarında (Java 8 və sonrası) stream'lərin istifadəsi, səmərəlilik, kodun oxunaqlılığı və məlumatların paralel işlənməsi ilə əlaqəli bir neçə səbəbə görədir:
- Funksional proqramlaşdırma: Stream'lər, məlumatlarla nə etmək lazım olduğunu daha çox deklarativ tərzdə yazmağa imkan verir, necəsə deyil. Bu, oxunaqlılığı və baxımını yaxşılaşdırır.
- Paralel işləmə: Stream'lər,
parallelStream()istifadə edərək kolleksiyalar üzərində əməliyyatların asanlıqla paralelləşdirilməsinə imkan verir. JVM, məlumatların bölünməsini və nəticələrin birləşdirilməsini idarə edir, çox nüvəli sistemlərdə daha sürətli hesablamaya şərait yaradır. - Effektivlik: Stream'lərdə tənbəl qiymətləndirmə (lazy evaluation) istifadə olunur, bu da əməliyyatların yalnız lazım olduqda icra olunacağı deməkdir və əlavə xərcləri azaldır. Aralıq əməliyyatlar (map, filter) dərhal icra edilmir, terminal əməliyyatına (collect, forEach) çağırılana qədər.
- Kolleksiyaların yaxşı işlənməsi: Filtrləmə, xəritələmə və toplama kimi standart və yüksək səviyyəli əməliyyatlar təmin edir, bu da döngələrlə yazılan kod miqdarını azaldır.
- Dəyişməz əməliyyatlar: Stream'lər, yaradıldıqdan sonra ilkin kolleksiyanı dəyişmir, dəyişməzlik prinsiplərini dəstəkləyir və səhvlərin tapılmasını asanlaşdırır.
// Stream'lərdən istifadə ilə filtrləmə və xəritələmə nümunəsi
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream() // Stream yaradılması
.filter(name -> name.startsWith("C")) // Filtrləmə
.map(String::toUpperCase) // Xəritələmə
.collect(Collectors.toList()); // Yeni siyahıya yığma
System.out.println(filteredNames); // Nəticə: [CHARLIE]
Paralel stream'lər:
// Paralel işləmə nümunəsi
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sum = numbers.parallelStream() // Paralel stream yaradılması
.mapToInt(Integer::intValue) // IntStream-ə çevrilmə
.sum(); // Toplama
System.out.println(sum); // Nəticə: 55 (çox nüvəli sistemlərdə daha sürətli hesablanır)