Lambda izraz je nova in pomembna funkcija Jave, ki je bila vključena v Java SE 8. Zagotavlja jasen in jedrnat način za predstavitev enega vmesnika metode z uporabo izraza. Zelo uporaben je v zbirki knjižnice. Pomaga pri ponavljanju, filtriranju in ekstrahiranju podatkov iz zbirke.
Lambda izraz se uporablja za zagotavljanje implementacije vmesnika, ki ima funkcionalen vmesnik. Prihrani veliko kode. V primeru lambda izraza nam ni treba znova definirati metode za zagotavljanje izvedbe. Tukaj samo napišemo implementacijsko kodo.
gimp brisanje ozadja
Lambda izraz Java se obravnava kot funkcija, zato prevajalnik ne ustvari datoteke .class.
Funkcionalni vmesnik
Lambda izraz zagotavlja implementacijo funkcionalni vmesnik . Vmesnik, ki ima samo eno abstraktno metodo, se imenuje funkcionalni vmesnik. Java ponuja opombo @ Funkcionalni vmesnik , ki se uporablja za razglasitev vmesnika kot funkcionalnega vmesnika.
Zakaj uporabljati lambda izraz
- Zagotoviti izvedbo funkcionalnega vmesnika.
- Manj kodiranja.
Sintaksa Java Lambda izraza
(argument-list) -> {body}
Lambda izraz Java je sestavljen iz treh komponent.
1) Seznam argumentov: Lahko je tudi prazen ali neprazen.
2) Puščični žeton: Uporablja se za povezovanje seznama argumentov in telesa izraza.
3) Telo: Vsebuje izraze in stavke za lambda izraz.
Brez sintakse parametra
() -> { //Body of no parameter lambda }
Sintaksa enega parametra
(p1) -> { //Body of single parameter lambda }
Sintaksa dveh parametrov
(p1,p2) -> { //Body of multiple parameter lambda }
Oglejmo si scenarij, v katerem ne izvajamo lambda izraza Java. Tukaj implementiramo vmesnik brez uporabe lambda izraza.
Brez lambda izraza
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(); } }Preizkusite zdaj
Izhod:
Drawing 10
Primer Java Lambda izraza
Zdaj bomo implementirali zgornji primer s pomočjo Java lambda izraza.
@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(); } }Preizkusite zdaj
Izhod:
Drawing 10
Lambda izraz ima lahko nič ali poljubno število argumentov. Oglejmo si primere:
zemljevid reactjs
Primer izraza Java Lambda: Brez parametra
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()); } }Preizkusite zdaj
Izhod:
I have nothing to say.
Primer Java Lambda izraza: en 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')); } }Preizkusite zdaj
Izhod:
Hello, Sonoo Hello, Sonoo
Primer izraza Java Lambda: več parametrov
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)); } }Preizkusite zdaj
Izhod:
30 300
Primer izraza Java Lambda: z vrnjeno ključno besedo ali brez nje
Če je v lambda izrazu Java samo en stavek, lahko uporabite ključno besedo return ali ne. Če lambda izraz vsebuje več stavkov, morate uporabiti vrni ključno besedo.
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)); } }Preizkusite zdaj
Izhod:
30 300
Primer Java Lambda izraza: 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) ); } }Preizkusite zdaj
Izhod:
ankit mayank irfan jai
Primer izraza Java Lambda: več stavkov
@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.')); } }Preizkusite zdaj
Izhod:
I would like to say, time is precious.
Primer izraza Java Lambda: Ustvarjanje niti
Za zagon niti lahko uporabite lambda izraz. V naslednjem primeru implementiramo metodo run z uporabo lambda izraza.
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(); } }Preizkusite zdaj
Izhod:
Thread1 is running... Thread2 is running...
Izraz Java lambda je mogoče uporabiti v ogrodju zbirke. Zagotavlja učinkovit in jedrnat način za ponavljanje, filtriranje in pridobivanje podatkov. Sledi nekaj primerov lambda in zbirk.
Primer izraza Java Lambda: primerjalnik
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); } } }Preizkusite zdaj
Izhod:
Sorting on the basis of name... 2 Dell Mouse 150.0 1 HP Laptop 25000.0 3 Keyboard 300.0
Primer izraza Java Lambda: Filter Collection Data
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) ); } }Preizkusite zdaj
Izhod:
Iphone 6S: 65000.0 Sony Xperia: 25000.0 Redmi4 : 26000.0
Primer izraza Java Lambda: poslušalec dogodkov
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); } }
Izhod: