Java'da lambda ifadeleri nedir ve hangi imkanları sağlarlar?
sobes.tech yapay zeka
AI'dan gelen yanıt
Java'da lambda ifadeleri, isimsiz fonksiyonlar (isimsiz metodlar) oluşturmak için kısa bir sözdizimidir ve argüman olarak geçirilebilir veya değişkenlerde saklanabilirler. Temelde, "anlık" olarak uygulanmış fonksiyonel arayüzlerdir.
Lambda ifadelerinin sağladığı temel özellikler:
-
Sözdizimi basitleştirme: Anonim iç sınıflara kıyasla fonksiyonel arayüzlerle çalışırken boilerplate kodu önemli ölçüde azaltır.
// Lambda öncesi: Runnable classicRunnable = new Runnable() { @Override public void run() { System.out.println("Klasik Runnable"); } }; // Lambda ile: Runnable lambdaRunnable = () -> System.out.println("Lambda Runnable"); -
Fonksiyonel programlama: Fonksiyonların birinci sınıf vatandaşlar olduğu ve veriler gibi geçirilebildiği daha fonksiyonel kod yazmaya olanak tanır. Bu, Stream API ile çalışmak için anahtar bir unsurdur.
// Lambda kullanarak liste filtreleme List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); List<String> filteredNames = names.stream() .filter(name -> name.startsWith("A")) .collect(Collectors.toList()); -
Stream API ile çalışma: Lambda ifadeleri, (filter, map, forEach, reduce vb.) Stream API'deki çoğu işlemin temelidir ve özlü ve paralel yürütme sağlar.
// Akışın elemanlarını dönüştürme ve yazdırma List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); numbers.stream() .map(n -> n * n) // haritalama için lambda .forEach(System.out::println); // metod referansı (lambda alternatifi) -
Okunabilirliği artırma: Basit işlemler için lambdalar, kodu daha okunabilir ve anlaşılır kılar, odak noktası işlemin kendisine kayar, anonim sınıf sözdizimine değil.
-
Fonksiyonel arayüzlerin uygulanması: Her yerde kullanılabilir, burada beklenen bir fonksiyonel arayüz örneği (tek soyut metoda sahip arayüz) olmalıdır.
Lambda ifadesinin sözdizimi: (parametreler) -> { gövde }
Örnekler:
- Parametresiz, dönüşsüz:
() -> System.out.println("Merhaba") - Bir parametreli, dönüşsüz:
name -> System.out.println("Merhaba, " + name)(tek parametre etrafındaki parantezler kaldırılabilir) - Birkaç parametreli, dönüşsüz:
(x, y) -> System.out.println(x + y) - Parametreli, dönüşümlü:
(a, b) -> a + b(gövde tek bir ifadeden oluşursa, değeri otomatik olarak döndürülür) - Parametreli, blok kod ve dönüşümlü:
(a, b) -> { int sum = a + b; return sum; }(dışındareturnaçıkça belirtilmelidir)