Java Stream API Terminal Operatorlar

Java Stream API, Java 8-dən bəri mövcud olan və funksional proqramlaşdırma üslubunu dəstəkləyən güclü bir vasitədir. Bu API, böyük məlumat dəstləri üzərində paralel və ardıcıl əməliyyatlar həyata keçirmək üçün istifadə olunur. Stream API iki əsas əməliyyat növü ilə işləyir: aralıq (intermediate) və terminal əməliyyatlar (terminal operations). Aralıq əməliyyatlar stream-dəki məlumatları dəyişdirir və yenidən stream qaytarır, terminal əməliyyatlar isə stream üzərində əməliyyatı sonlandırır və nəticəni qaytarır. Bu məqalədə Java Stream API-də istifadə olunan terminal operatorlar haqqında geniş məlumat verək.

27 Avqust 2024 - 00:00
 0  87
Java Stream API Terminal Operatorlar

Terminal operatorlar, stream-in son əməliyyatlarıdır. Bu əməliyyatlar nəticədə ya bir dəyər qaytarır, ya da bir yan təsir (side-effect) yaradır və stream-i sonlandırır. Terminal əməliyyatlarının icrasından sonra stream artıq istifadə edilə bilməz. Ən çox istifadə olunan terminal əməliyyatlar aşağıda izah edilir:

1. forEach()

forEach() terminal əməliyyatı, stream-dəki hər bir elementi götürərək verilən əməliyyatı (funksiyanı) icra edir. Yan təsir yaradan bir metod olub, nəticəni qaytarmır.

List names = Arrays.asList("Aqil", "Vasif", "Azad");
names.stream().forEach(name -> System.out.println(name));

Bu kod hər bir adı konsolda çap edəcəkdir.

2. collect()

collect() terminal əməliyyatı, stream-dəki elementləri müxtəlif konteynerlərə (List, Set, Map) toplamaq üçün istifadə olunur. Bu əməliyyatın ən çox istifadə olunan forması Collectors sinfi ilə birlikdə işləməkdir.

List names = Arrays.asList("Aqil", "Vasif", "Azad");
List upperCaseNames = names.stream()
                                   .map(String::toUpperCase)
                                   .collect(Collectors.toList());

Bu kod, adları böyük hərflə yazılmış bir siyahıya toplayır.

3. reduce()

reduce() əməliyyatı, stream-dəki elementləri müəyyən bir əməliyyat əsasında azaldaraq bir tək nəticə dəyəri çıxarmaq üçün istifadə olunur. Bu əməliyyat çox vaxt toplama, vurma və digər riyazi əməliyyatlar üçün istifadə olunur.

List numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, Integer::sum);

Bu kod, 1-dən 5-ə qədər olan rəqəmlərin cəmini qaytaracaq.

4. count()

count() terminal əməliyyatı, stream-dəki elementlərin sayını qaytarır.

List names = Arrays.asList("Aqil", "Vasif", "Azad");
long count = names.stream().count();

Bu kod, siyahıdakı elementlərin sayını qaytarır (bu nümunədə nəticə 3 olacaq).

5. anyMatch(), allMatch(), noneMatch()

Bu üç terminal əməliyyat, stream-də müəyyən şərtə uyğunluq olub olmadığını yoxlayır.

  • anyMatch(): Stream-də ən azı bir elementin verilən şərtə uyğun olub olmadığını yoxlayır.
  • allMatch(): Bütün elementlərin şərtə uyğun olub olmadığını yoxlayır.
  • noneMatch(): Heç bir elementin şərtə uyğun olub olmadığını yoxlayır.
List numbers = Arrays.asList(1, 2, 3, 4, 5);
boolean allEven = numbers.stream().allMatch(n -> n % 2 == 0);

Bu kod, bütün rəqəmlərin cüt olub olmadığını yoxlayır (nəticə false olacaq).

6. findFirst()findAny()

findFirst()findAny() əməliyyatları, stream-dəki ilk uyğun elementi qaytarır.

  • findFirst(): Stream-in ilk elementini qaytarır.
  • findAny(): Paralel stream-də hər hansı bir uyğun elementi qaytara bilər.
List names = Arrays.asList("Aqil", "Vasif", "Azad");
Optional first = names.stream().findFirst();

Bu kod, siyahıdakı ilk adı qaytaracaq ("Aqil").

Java Stream API terminal operatorları, funksional proqramlaşdırma üslubunda böyük məlumat dəstləri ilə işləmək üçün güclü və sadə bir vasitə təmin edir. forEach(), collect(), reduce(), count() kimi əməliyyatlar müxtəlif məqsədlər üçün istifadə edilə bilər və verilənlər üzərindəki əməliyyatları asanlıqla yerinə yetirməyə imkan verir. Terminal operatorlarının hər biri, stream üzərindəki əməliyyatları tamamlayır və stream-i sonlandırır. Bu səbəblə, Stream API-dən istifadə edəcək istifadəçilər bu operatorları dərin şəkildə başa düşməli və doğru şəkildə tətbiq etməlidir.