Lambda ifadesi, Java SE 8'e dahil edilen Java'nın yeni ve önemli bir özelliğidir. Bir ifade kullanarak bir yöntem arayüzünü temsil etmenin açık ve kısa bir yolunu sağlar. Koleksiyon kütüphanesinde çok faydalıdır. Koleksiyondaki verileri yinelemeye, filtrelemeye ve çıkarmaya yardımcı olur.
Lambda ifadesi, işlevsel arayüze sahip bir arayüzün uygulanmasını sağlamak için kullanılır. Çok fazla kod tasarrufu sağlar. Lambda ifadesi durumunda, uygulamanın sağlanması için yöntemi tekrar tanımlamamıza gerek yoktur. Burada sadece uygulama kodunu yazıyoruz.
Java lambda ifadesi bir işlev olarak ele alınır, bu nedenle derleyici .class dosyası oluşturmaz.
Fonksiyonel Arayüz
Lambda ifadesi aşağıdakilerin uygulanmasını sağlar: fonksiyonel arayüz . Yalnızca bir soyut yöntemi olan bir arayüze fonksiyonel arayüz denir. Java bir açıklama sağlar @ İşlevselArayüz Bir arayüzü işlevsel arayüz olarak bildirmek için kullanılır.
Lambda İfadesini neden kullanmalı?
- Fonksiyonel arayüzün uygulanmasını sağlamak.
- Daha az kodlama.
Java Lambda İfadesi Söz Dizimi
(argument-list) -> {body}
Java lambda ifadesi üç bileşenden oluşur.
1) Argüman listesi: Boş veya boş olmayan da olabilir.
2) Ok belirteci: Argüman listesi ile ifade gövdesini birbirine bağlamak için kullanılır.
3) Gövde: Lambda ifadesi için ifadeler ve ifadeler içerir.
Parametre Sözdizimi Yok
java filtre akışı
() -> { //Body of no parameter lambda }
Bir Parametre Söz Dizimi
(p1) -> { //Body of single parameter lambda }
İki Parametre Söz Dizimi
(p1,p2) -> { //Body of multiple parameter lambda }
Java lambda ifadesini uygulamadığımız bir senaryo görelim. Burada lambda ifadesini kullanmadan bir arayüz gerçekleştiriyoruz.
Lambda İfadesi Olmadan
interface Drawable{ public void draw(); } public class LambdaExpressionExample { public static void main(String[] args) { int width=10; //without lambda, Drawable implementation using anonymous class Drawable d=new Drawable(){ public void draw(){System.out.println('Drawing '+width);} }; d.draw(); } }Şimdi Test Edin
Çıktı:
Drawing 10
Java Lambda İfadesi Örneği
Şimdi yukarıdaki örneği Java lambda ifadesi yardımıyla uygulayacağız.
@FunctionalInterface //It is optional interface Drawable{ public void draw(); } public class LambdaExpressionExample2 { public static void main(String[] args) { int width=10; //with lambda Drawable d2=()->{ System.out.println('Drawing '+width); }; d2.draw(); } }Şimdi Test Edin
Çıktı:
Drawing 10
Bir lambda ifadesi sıfır veya herhangi bir sayıda bağımsız değişkene sahip olabilir. Örnekleri görelim:
Java Lambda İfadesi Örneği: Parametre Yok
interface Sayable{ public String say(); } public class LambdaExpressionExample3{ public static void main(String[] args) { Sayable s=()->{ return 'I have nothing to say.'; }; System.out.println(s.say()); } }Şimdi Test Edin
Çıktı:
I have nothing to say.
Java Lambda İfadesi Örneği: Tek Parametre
interface Sayable{ public String say(String name); } public class LambdaExpressionExample4{ public static void main(String[] args) { // Lambda expression with single parameter. Sayable s1=(name)->{ return 'Hello, '+name; }; System.out.println(s1.say('Sonoo')); // You can omit function parentheses Sayable s2= name ->{ return 'Hello, '+name; }; System.out.println(s2.say('Sonoo')); } }Şimdi Test Edin
Çıktı:
Hello, Sonoo Hello, Sonoo
Java Lambda İfadesi Örneği: Çoklu Parametreler
interface Addable{ int add(int a,int b); } public class LambdaExpressionExample5{ public static void main(String[] args) { // Multiple parameters in lambda expression Addable ad1=(a,b)->(a+b); System.out.println(ad1.add(10,20)); // Multiple parameters with data type in lambda expression Addable ad2=(int a,int b)->(a+b); System.out.println(ad2.add(100,200)); } }Şimdi Test Edin
Çıktı:
30 300
Java Lambda İfadesi Örneği: return anahtar kelimesiyle veya olmadan
Java lambda ifadesinde, yalnızca bir ifade varsa, return anahtar sözcüğünü kullanabilir veya kullanmayabilirsiniz. Lambda ifadesi birden fazla ifade içerdiğinde return anahtar sözcüğünü kullanmanız gerekir.
interface Addable{ int add(int a,int b); } public class LambdaExpressionExample6 { public static void main(String[] args) { // Lambda expression without return keyword. Addable ad1=(a,b)->(a+b); System.out.println(ad1.add(10,20)); // Lambda expression with return keyword. Addable ad2=(int a,int b)->{ return (a+b); }; System.out.println(ad2.add(100,200)); } }Şimdi Test Edin
Çıktı:
30 300
Java Lambda İfadesi Örneği: Foreach Döngüsü
import java.util.*; public class LambdaExpressionExample7{ public static void main(String[] args) { List list=new ArrayList(); list.add('ankit'); list.add('mayank'); list.add('irfan'); list.add('jai'); list.forEach( (n)->System.out.println(n) ); } }Şimdi Test Edin
Çıktı:
ankit mayank irfan jai
Java Lambda İfadesi Örneği: Çoklu İfadeler
@FunctionalInterface interface Sayable{ String say(String message); } public class LambdaExpressionExample8{ public static void main(String[] args) { // You can pass multiple statements in lambda expression Sayable person = (message)-> { String str1 = 'I would like to say, '; String str2 = str1 + message; return str2; }; System.out.println(person.say('time is precious.')); } }Şimdi Test Edin
Çıktı:
I would like to say, time is precious.
Java Lambda İfadesi Örneği: Konu Oluşturma
İş parçacığını çalıştırmak için lambda ifadesini kullanabilirsiniz. Aşağıdaki örnekte lambda ifadesini kullanarak run metodunu uyguluyoruz.
public class LambdaExpressionExample9{ public static void main(String[] args) { //Thread Example without lambda Runnable r1=new Runnable(){ public void run(){ System.out.println('Thread1 is running...'); } }; Thread t1=new Thread(r1); t1.start(); //Thread Example with lambda Runnable r2=()->{ System.out.println('Thread2 is running...'); }; Thread t2=new Thread(r2); t2.start(); } }Şimdi Test Edin
Çıktı:
Thread1 is running... Thread2 is running...
Koleksiyon çerçevesinde Java lambda ifadesi kullanılabilir. Verileri yinelemek, filtrelemek ve getirmek için etkili ve kısa bir yol sağlar. Aşağıda bazı lambda ve koleksiyon örnekleri verilmiştir.
Java Lambda İfadesi Örneği: Karşılaştırıcı
import java.util.ArrayList; import java.util.Collections; import java.util.List; class Product{ int id; String name; float price; public Product(int id, String name, float price) { super(); this.id = id; this.name = name; this.price = price; } } public class LambdaExpressionExample10{ public static void main(String[] args) { List list=new ArrayList(); //Adding Products list.add(new Product(1,'HP Laptop',25000f)); list.add(new Product(3,'Keyboard',300f)); list.add(new Product(2,'Dell Mouse',150f)); System.out.println('Sorting on the basis of name...'); // implementing lambda expression Collections.sort(list,(p1,p2)->{ return p1.name.compareTo(p2.name); }); for(Product p:list){ System.out.println(p.id+' '+p.name+' '+p.price); } } }Şimdi Test Edin
Çıktı:
Sorting on the basis of name... 2 Dell Mouse 150.0 1 HP Laptop 25000.0 3 Keyboard 300.0
Java Lambda İfadesi Örneği: Toplama Verilerini Filtrele
import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; class Product{ int id; String name; float price; public Product(int id, String name, float price) { super(); this.id = id; this.name = name; this.price = price; } } public class LambdaExpressionExample11{ public static void main(String[] args) { List list=new ArrayList(); list.add(new Product(1,'Samsung A5',17000f)); list.add(new Product(3,'Iphone 6S',65000f)); list.add(new Product(2,'Sony Xperia',25000f)); list.add(new Product(4,'Nokia Lumia',15000f)); list.add(new Product(5,'Redmi4 ',26000f)); list.add(new Product(6,'Lenevo Vibe',19000f)); // using lambda to filter data Stream filtered_data = list.stream().filter(p -> p.price > 20000); // using lambda to iterate through collection filtered_data.forEach( product -> System.out.println(product.name+': '+product.price) ); } }Şimdi Test Edin
Çıktı:
Iphone 6S: 65000.0 Sony Xperia: 25000.0 Redmi4 : 26000.0
Java Lambda İfadesi Örneği: Olay Dinleyici
import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextField; public class LambdaEventListenerExample { public static void main(String[] args) { JTextField tf=new JTextField(); tf.setBounds(50, 50,150,20); JButton b=new JButton('click'); b.setBounds(80,100,70,30); // lambda expression implementing here. b.addActionListener(e-> {tf.setText('hello swing');}); JFrame f=new JFrame(); f.add(tf);f.add(b); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLayout(null); f.setSize(300, 200); f.setVisible(true); } }
Çıktı: