Lambda výraz je nová a dôležitá vlastnosť jazyka Java, ktorá bola zahrnutá do Java SE 8. Poskytuje jasný a stručný spôsob reprezentácie rozhrania jednej metódy pomocou výrazu. Je to veľmi užitočné v knižnici zbierok. Pomáha iterovať, filtrovať a extrahovať údaje zo zbierky.
ako previesť celé číslo na reťazec java
Výraz lambda sa používa na zabezpečenie implementácie rozhrania, ktoré má funkčné rozhranie. Ušetrí to veľa kódu. V prípade lambda výrazu nemusíme znovu definovať metódu na zabezpečenie implementácie. Tu len napíšeme implementačný kód.
Výraz Java lambda je považovaný za funkciu, takže kompilátor nevytvára súbor .class.
Funkčné rozhranie
Lambda výraz poskytuje implementáciu funkčné rozhranie . Rozhranie, ktoré má iba jednu abstraktnú metódu, sa nazýva funkčné rozhranie. Java poskytuje anotáciu @ Funkčné rozhranie , ktorý sa používa na vyhlásenie rozhrania ako funkčného rozhrania.
Prečo používať Lambda Expression
- Poskytnúť implementáciu funkčného rozhrania.
- Menej kódovania.
Syntax výrazu Java Lambda
(argument-list) -> {body}
Výraz Java lambda sa skladá z troch komponentov.
1) Zoznam argumentov: Môže byť tiež prázdny alebo neprázdny.
2) Žetón so šípkou: Používa sa na prepojenie zoznamu argumentov a tela výrazu.
3) Telo: Obsahuje výrazy a príkazy pre výraz lambda.
Žiadna syntax parametrov
() -> { //Body of no parameter lambda }
Syntax jedného parametra
(p1) -> { //Body of single parameter lambda }
Syntax dvoch parametrov
(p1,p2) -> { //Body of multiple parameter lambda }
Pozrime sa na scenár, v ktorom neimplementujeme výraz Java lambda. Tu implementujeme rozhranie bez použitia výrazu lambda.
nastaviť v jave
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(); } }Vyskúšajte to
Výkon:
Drawing 10
Príklad výrazu Java Lambda
Teraz budeme implementovať vyššie uvedený príklad pomocou 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(); } }Vyskúšajte to
Výkon:
Drawing 10
Výraz lambda môže mať nula alebo ľubovoľný počet argumentov. Pozrime sa na príklady:
Príklad výrazu Java Lambda: Žiadny parameter
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()); } }Vyskúšajte to
Výkon:
I have nothing to say.
Príklad výrazu Java Lambda: Jeden parameter
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')); } }Vyskúšajte to
Výkon:
Hello, Sonoo Hello, Sonoo
Príklad výrazu Java Lambda: Viaceré parametre
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)); } }Vyskúšajte to
Výkon:
30 300
Príklad výrazu Java Lambda: s návratovým kľúčovým slovom alebo bez neho
Ak vo výraze Java lambda existuje iba jeden príkaz, môžete alebo nemusíte použiť kľúčové slovo return. Ak výraz lambda obsahuje viacero príkazov, musíte použiť kľúčové slovo return.
mapa v jave
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)); } }Vyskúšajte to
Výkon:
30 300
Prí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) ); } }Vyskúšajte to
Výkon:
ankit mayank irfan jai
Príklad výrazu Java Lambda: Viacnásobné príkazy
@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.')); } }Vyskúšajte to
Výkon:
I would like to say, time is precious.
Príklad výrazu Java Lambda: Vytváranie vlákna
Na spustenie vlákna môžete použiť výraz lambda. V nasledujúcom príklade implementujeme metódu spustenia pomocou výrazu lambda.
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(); } }Vyskúšajte to
Výkon:
Thread1 is running... Thread2 is running...
V rámci kolekcie možno použiť výraz Java lambda. Poskytuje efektívny a stručný spôsob iterácie, filtrovania a získavania údajov. Nižšie sú uvedené niektoré príklady lambda a kolekcie.
Prí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); } } }Vyskúšajte to
Výkon:
Sorting on the basis of name... 2 Dell Mouse 150.0 1 HP Laptop 25000.0 3 Keyboard 300.0
Príklad výrazu Java Lambda: Filtrovanie údajov kolekcie
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) ); } }Vyskúšajte to
Výkon:
Edith Mack Hirsch
Iphone 6S: 65000.0 Sony Xperia: 25000.0 Redmi4 : 26000.0
Príklad výrazu Java Lambda: Prijímač udalostí
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ýkon: