logo

Java Lambda izteiksmes

Lambda izteiksme ir jauna un svarīga Java funkcija, kas tika iekļauta Java SE 8. Tā nodrošina skaidru un kodolīgu veidu, kā attēlot vienas metodes saskarni, izmantojot izteiksmi. Tas ir ļoti noderīgi kolekcijas bibliotēkā. Tas palīdz atkārtot, filtrēt un iegūt datus no kolekcijas.

Lambda izteiksme tiek izmantota, lai nodrošinātu interfeisa ieviešanu ar funkcionālu saskarni. Tas ietaupa daudz koda. Lambda izteiksmes gadījumā mums nav atkārtoti jādefinē ieviešanas nodrošināšanas metode. Šeit mēs vienkārši rakstām ieviešanas kodu.

Java lambda izteiksme tiek uzskatīta par funkciju, tāpēc kompilators neveido .class failu.

Funkcionālais interfeiss

Lambda izteiksme nodrošina ieviešanu funkcionāls interfeiss . Interfeisu, kam ir tikai viena abstrakta metode, sauc par funkcionālo saskarni. Java nodrošina anotāciju @ Funkcionālā saskarne , ko izmanto, lai interfeisu deklarētu kā funkcionālu interfeisu.


Kāpēc izmantot Lambda izteiksmi

  1. Nodrošināt funkcionālā interfeisa ieviešanu.
  2. Mazāk kodēšanas.

Java Lambda izteiksmes sintakse

 (argument-list) -> {body} 

Java lambda izteiksme sastāv no trim komponentiem.

1) Argumentu saraksts: Tas var būt arī tukšs vai netukšs.

2) Bultiņas marķieris: To izmanto, lai saistītu argumentu sarakstu un izteiksmes pamattekstu.

3) Korpuss: Tas satur izteiksmes un paziņojumus lambda izteiksmei.

Nav parametru sintakses

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

Viena parametra sintakse

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

Divu parametru sintakse

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

Apskatīsim scenāriju, kurā netiek ieviesta Java lambda izteiksme. Šeit mēs ieviešam saskarni, neizmantojot lambda izteiksmi.

virkne tukša

Bez Lambda izteiksmes

 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(); } } 
Izmēģiniet to tagad

Izvade:

 Drawing 10 

Java Lambda izteiksmes piemērs

Tagad mēs ieviesīsim iepriekš minēto piemēru, izmantojot Java lambda izteiksmi.

 @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(); } } 
Izmēģiniet to tagad

Izvade:

 Drawing 10 

Lambda izteiksmei var būt nulle vai jebkurš argumentu skaits. Apskatīsim piemērus:

Java Lambda izteiksmes piemērs: nav parametru

 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()); } } 
Izmēģiniet to tagad

Izvade:

 I have nothing to say. 

Java Lambda izteiksmes piemērs: viens parametrs

 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')); } } 
Izmēģiniet to tagad

Izvade:

 Hello, Sonoo Hello, Sonoo 

Java Lambda izteiksmes piemērs: vairāki parametri

 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)); } } 
Izmēģiniet to tagad

Izvade:

 30 300 

Java Lambda izteiksmes piemērs: ar vai bez atgriešanas atslēgvārda

Java lambda izteiksmē, ja ir tikai viens priekšraksts, varat izmantot vai neizmantot atgriešanās atslēgvārdu. Ja lambda izteiksmē ir vairāki priekšraksti, ir jāizmanto atgriešanas atslēgvārds.

 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)); } } 
Izmēģiniet to tagad

Izvade:

apakšvirknes virkne java
 30 300 

Java Lambda izteiksmes piemērs: Foreach cilpa

 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) ); } } 
Izmēģiniet to tagad

Izvade:

 ankit mayank irfan jai 

Java Lambda izteiksmes piemērs: vairāki paziņojumi

 @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.')); } } 
Izmēģiniet to tagad

Izvade:

 I would like to say, time is precious. 

Java Lambda izteiksmes piemērs: pavediena izveide

Lai palaistu pavedienu, varat izmantot lambda izteiksmi. Nākamajā piemērā mēs ieviešam palaišanas metodi, izmantojot lambda izteiksmi.

 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(); } } 
Izmēģiniet to tagad

Izvade:

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

Java lambda izteiksmi var izmantot savākšanas sistēmā. Tas nodrošina efektīvu un kodolīgu veidu, kā atkārtot, filtrēt un iegūt datus. Tālāk ir sniegti daži lambda un kolekcijas piemēri.

Java Lambda izteiksmes piemērs: Comparator

 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); } } } 
Izmēģiniet to tagad

Izvade:

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

Java Lambda izteiksmes piemērs: filtru kolekcijas dati

 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) ); } } 
Izmēģiniet to tagad

Izvade:

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

Java Lambda izteiksmes piemērs: notikumu uztvērējs

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

Izvade:

Java Lambda notikumu apstrādes piemērs