☕ Java Lambda İfadeleri (Anonymous Functions) Nasıl Kullanılır?
Java Lambda ifadeleri, yani anonim fonksiyonlar, bir kod bloğunu parametre olarak geçirmenizi sağlar.
Bu sayede daha kısa, temiz ve fonksiyonel tarzda kod yazabilirsiniz.
🧠 Teknik Özet
Ana konu: Java’da Lambda ifadeleri (anonim fonksiyonlar)
Amaç: Gereksiz sınıf tanımlarını azaltarak kodu sadeleştirmek ve okunabilirliği artırmak
Adımlar:
- Lambda ifadesi yapısını öğrenme
- JShell üzerinde örneklerle deneme
- Yerleşik işlevsel arayüzleri (Predicate, Consumer, Function...) uygulama
💡 Lambda ifadeleri, Java’nın fonksiyonel programlama yaklaşımını destekler ve
java.util.functionpaketi ile entegre çalışır.
⚙️ 1. Lambda Yapısını Anlamak
Lambda genel sözdizimi:
(argümanlar) -> { gövde }
Argümanlar: Parantez içinde, tür belirtmeden yazılabilir (Java otomatik algılar).
Ok İşareti (->): Parametreleri kod bloğuna bağlar.
Gövde: Çalıştırılacak kod bloğunu içerir.
💬 JShell kullanarak örnekleri test etmek için terminalde jshell yazın, çıkmak için /exit komutunu kullanın.
🐾 2. Basit Lambda Örneği
Bir liste oluşturalım:
List<String> evcilHayvanlar = Arrays.asList("Köpek", "Kedi");
Her öğeyi ekrana yazdıralım:
evcilHayvanlar.forEach(x -> System.out.println(x));
Aynı kodun sade hali (metot referansı):
evcilHayvanlar.forEach(System.out::println);
💡 System.out::println, x -> System.out.println(x) ifadesinin kısa yazımıdır.
📜 3. Çok Satırlı Lambda Gövdesi
Lambda gövdesi birden fazla satır içeriyorsa kullanılır:
evcilHayvanlar.forEach(x -> {
System.out.println("Adı: " + x);
System.out.println("Sıra No: " + evcilHayvanlar.indexOf(x));
});
Çıktı:
Adı: Köpek
Sıra No: 0
Adı: Kedi
Sıra No: 1
🧩 4. Yerleşik İşlevsel Arayüzler
Java 8 ile gelen java.util.function paketi, sık kullanılan Lambda senaryoları için hazır arayüzler sunar. Bunlar tek metot içerir ve Lambda ifadeleriyle doğrudan uyumludur.
✅ Predicate (Koşul Kontrolü)
Bir koşulu test eder, boolean döner.
Predicate<String> filtreleK = x -> x.startsWith("K");
evcilHayvanlar.stream().filter(filtreleK).forEach(System.out::println);
Çıktı: Köpek, Kedi
📦 Consumer (Değer Tüketimi)
Değeri kullanır ama geri döndürmez (void döner).
Consumer<String> hayvanYazdir = x -> System.out.println(x);
evcilHayvanlar.forEach(hayvanYazdir);
Çıktı: Köpek, Kedi
🔄 Function (Değer Dönüştürme)
Bir değeri başka bir değere dönüştürür.
Function<String, String> buyukHarfYap = x -> x.toUpperCase();
evcilHayvanlar.stream().map(buyukHarfYap).forEach(System.out::println);
Çıktı: KÖPEK, KEDİ
⏰ Supplier (Değer Sağlayıcı)
Parametre almaz, çağrıldığında bir değer üretir.
Supplier<java.time.LocalTime> saatVer = () -> java.time.LocalTime.now();
System.out.println(saatVer.get());
Çıktı: 21:52:38.384278 gibi anlık saat
🔁 UnaryOperator (Tekli İşlem)
Girdi ve çıktı tipi aynıdır, genellikle dönüşümde kullanılır.
UnaryOperator<String> buyukHarf = x -> x.toUpperCase();
System.out.println(buyukHarf.apply("kopek"));
Çıktı: KOPEK
➕ BinaryOperator (İkili İşlem)
İki değeri birleştirir, girdi ve çıktı tipi aynıdır.
BinaryOperator<Integer> toplama = (x, y) -> x + y;
System.out.println(toplama.apply(5, 3));
Çıktı: 8
❓ Sıkça Sorulan Sorular (SSS)
- Lambda ifadeleri neden anonimdir?
Çünkü isimleri yoktur. Tek seferlik işlemler için yazılırlar.
- Metot referansı (::) ne işe yarar?
Lambda sadece bir metot çağırıyorsa, bu ifade kodu kısaltır: System.out::println.
- Tüm arayüzler Lambda olabilir mi?
Hayır. Sadece tek soyut metot içeren işlevsel arayüzler (@FunctionalInterface) olabilir.
- Predicate ve Function farkı nedir?
Predicate yalnızca boolean döndürür; Function dönüş tipini serbest bırakır.
- Lambda ifadeleri nerelerde kullanılır?
Stream API, olay yönetimi, filtreleme ve veri işleme gibi senaryolarda yaygındır.
🏁 Sonuç
Bu rehberde Java'da Lambda ifadeleri oluşturmayı, metot referanslarını ve java.util.function paketindeki yerleşik arayüzleri (Predicate, Consumer, Function vb.) kullanmayı öğrendiniz.
Artık kodlarınızı daha kısa, okunabilir ve fonksiyonel bir yaklaşımla yazabilirsiniz. 💡 Kendi örneklerinizi Rabisu Bulut üzerinde Java ortamında test edebilir, kodlarınızı anında çalıştırabilirsiniz.