logo

Java Lambda výrazy

Lambda výraz je nová a důležitá funkce Javy, která byla zahrnuta do Java SE 8. Poskytuje jasný a stručný způsob, jak reprezentovat rozhraní jedné metody pomocí výrazu. To je velmi užitečné v knihovně sbírky. Pomáhá iterovat, filtrovat a extrahovat data z kolekce.

Výraz lambda se používá k zajištění implementace rozhraní, které má funkční rozhraní. Ušetří to spoustu kódu. V případě lambda výrazu nemusíme znovu definovat metodu pro zajištění implementace. Zde pouze napíšeme implementační kód.

Java výraz lambda je považován za funkci, takže kompilátor nevytváří soubor .class.

Funkční rozhraní

Lambda výraz poskytuje implementaci funkční rozhraní . Rozhraní, které má pouze jednu abstraktní metodu, se nazývá funkční rozhraní. Java poskytuje anotaci @ Funkční rozhraní , který se používá k prohlášení rozhraní jako funkčního rozhraní.


Proč používat Lambda Expression

  1. Poskytnout implementaci funkčního rozhraní.
  2. Méně kódování.

Syntaxe výrazu Java Lambda

 (argument-list) -> {body} 

Java lambda výraz se skládá ze tří složek.

c program pro dvourozměrné pole

1) Seznam argumentů: Může být také prázdný nebo neprázdný.

2) Žeton šipky: Používá se k propojení seznamu argumentů a těla výrazu.

3) Tělo: Obsahuje výrazy a příkazy pro výraz lambda.

Žádná syntaxe parametrů

 () -> { //Body of no parameter lambda } 

Syntaxe jednoho parametru

sanjay dutt a
 (p1) -> { //Body of single parameter lambda } 

Syntaxe dvou parametrů

 (p1,p2) -> { //Body of multiple parameter lambda } 

Podívejme se na scénář, kdy neimplementujeme výraz Java lambda. Zde implementujeme rozhraní bez použití výrazu lambda.

mapa v Javě

Bez Lambda Expression

 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(); } } 
Otestujte to hned

Výstup:

 Drawing 10 

Příklad výrazu Java Lambda

Nyní budeme implementovat výše uvedený příklad pomocí výrazu Java lambda.

 @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(); } } 
Otestujte to hned

Výstup:

 Drawing 10 

Výraz lambda může mít nula nebo libovolný počet argumentů. Podívejme se na příklady:

čísla pro abecedu

Příklad výrazu Java Lambda: Žádný parametr

 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()); } } 
Otestujte to hned

Výstup:

 I have nothing to say. 

Příklad výrazu Java Lambda: Jeden parametr

 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')); } } 
Otestujte to hned

Výstup:

 Hello, Sonoo Hello, Sonoo 

Příklad výrazu Java Lambda: Více parametrů

 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)); } } 
Otestujte to hned

Výstup:

 30 300 

Příklad výrazu Java Lambda: s klíčovým slovem return nebo bez něj

Pokud ve výrazu Java lambda existuje pouze jeden příkaz, můžete nebo nemusíte použít klíčové slovo return. Pokud výraz lambda obsahuje více příkazů, musíte použít klíčové slovo return.

 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)); } } 
Otestujte to hned

Výstup:

 30 300 

Příklad výrazu Java Lambda: Foreach Loop

 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) ); } } 
Otestujte to hned

Výstup:

 ankit mayank irfan jai 

Příklad výrazu Java Lambda: Více příkazů

 @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.')); } } 
Otestujte to hned

Výstup:

 I would like to say, time is precious. 

Příklad výrazu Java Lambda: Vytvoření vlákna

Ke spuštění vlákna můžete použít výraz lambda. V následujícím příkladu implementujeme metodu běhu pomocí výrazu lambda.

kolečko myši se neposouvá správně
 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(); } } 
Otestujte to hned

Výstup:

 Thread1 is running... Thread2 is running... 

V rámci kolekce lze použít výraz Java lambda. Poskytuje efektivní a stručný způsob iterace, filtrování a načítání dat. Níže jsou uvedeny některé příklady lambda a kolekce.

Příklad výrazu Java Lambda: Komparátor

 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); } } } 
Otestujte to hned

Výstup:

 Sorting on the basis of name... 2 Dell Mouse 150.0 1 HP Laptop 25000.0 3 Keyboard 300.0 

Příklad výrazu Java Lambda: Filtrování dat kolekce

 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) ); } } 
Otestujte to hned

Výstup:

 Iphone 6S: 65000.0 Sony Xperia: 25000.0 Redmi4 : 26000.0 

Příklad výrazu Java Lambda: Posluchač událostí

 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); } } 

Výstup:

Příklad zpracování událostí Java Lambda