Sobes.tech
Middle

Java-da lambda ifadələri nədir və hansı imkanları təqdim edir?

sobes.tech Süni İntellekt

AI-dan cavab

Java-da lambda ifadələri, adı olmayan funksiyalar (adlı metodlar) yaratmaq üçün qısa sintaksisdir və arqument kimi ötürülə və ya dəyişənlərdə saxlanıla bilər. Əsasən, bunlar "anlıqda" həyata keçirilmiş funksional interfeyslərdir.

Lambda ifadələrinin əsas imkanları:

  • Sintaksisi sadələşdirmək: Anonim daxili siniflərlə müqayisədə funksional interfeyslərlə işləyərkən boilerplate kodunu əhəmiyyətli dərəcədə qısaldır.

    // Lambda-dan əvvəl:
    Runnable classicRunnable = new Runnable() {
        @Override
        public void run() {
            System.out.println("Klassik Runnable");
        }
    };
    
    // Lambda ilə:
    Runnable lambdaRunnable = () -> System.out.println("Lambda Runnable");
    
  • Funksional proqramlaşdırma: Bu, funksiyaları birinci dərəcəli vətəndaşlar edir və məlumat kimi ötürülə bilər. Bu, Stream API ilə işləmək üçün əsas elementdir.

    // Lambda ilə siyahını filtrləmək
    List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    List<String> filteredNames = names.stream()
                                     .filter(name -> name.startsWith("A"))
                                     .collect(Collectors.toList());
    
  • Stream API ilə işləmək: Lambda ifadələri, (filter, map, forEach, reduce və s.) Stream API-də ən çox istifadə olunan əməliyyatların əsasını təşkil edir və qısa və paralel icra təmin edir.

    // Stream elementlərinin çevrilməsi və çıxarılması
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    numbers.stream()
           .map(n -> n * n) // xəritələmə üçün lambda
           .forEach(System.out::println); // metod referansı (lambda-ya alternativ)
    
  • Oxumağı yaxşılaşdırmaq: Sadə əməliyyatlar üçün lambda kodu daha oxunaqlı və anlaşılan edir, əməliyyata diqqəti cəmləşdirir və anonim sinif sintaksisindən imtina edir.

  • Funksional interfeyslərin həyata keçirilməsi: Hər yerdə istifadə oluna bilər, burada tək abstrakt metodu olan interfeys gözlənilir.

Lambda ifadəsinin sintaksisi: (parametrlər) -> { bədən }

Nümunələr:

  • Parametrlər olmadan, geri dönüşsüz: () -> System.out.println("Salam")
  • Bir parametrli, geri dönüşsüz: name -> System.out.println("Salam, " + name) (bir parametr ətrafında mötərizələri çıxarmaq olar)
  • Bir neçə parametrli, geri dönüşsüz: (x, y) -> System.out.println(x + y)
  • Parametrlərlə, geri dönüşlü: (a, b) -> a + b (əgər bədən tək ifadədən ibarətdirsə, onun dəyəri avtomatik olaraq geri qaytarılır)
  • Parametrlərlə, blok və geri dönüşlü: (a, b) -> { int sum = a + b; return sum; } (açıq return bloklar üçün tələb olunur)