logo

Java Lambda izrazi

Lambda izraz nova je i važna značajka Jave koja je uključena u Javu SE 8. Omogućuje jasan i koncizan način predstavljanja jednog sučelja metode pomoću izraza. Vrlo je koristan u knjižnici zbirke. Pomaže u ponavljanju, filtriranju i izdvajanju podataka iz zbirke.

Lambda izraz se koristi za pružanje implementacije sučelja koje ima funkcionalno sučelje. Štedi mnogo koda. U slučaju lambda izraza, ne moramo ponovno definirati metodu za pružanje implementacije. Ovdje samo pišemo implementacijski kod.

Java lambda izraz se tretira kao funkcija, tako da prevodilac ne stvara .class datoteku.

Funkcionalno sučelje

Lambda izraz osigurava implementaciju funkcionalno sučelje . Sučelje koje ima samo jednu apstraktnu metodu naziva se funkcionalnim sučeljem. Java pruža oznaku @ Funkcionalno sučelje , koji se koristi za deklariranje sučelja kao funkcionalnog sučelja.


Zašto koristiti Lambda izraz

  1. Osigurati implementaciju funkcionalnog sučelja.
  2. Manje kodiranja.

Sintaksa Java Lambda izraza

 (argument-list) -> {body} 

Java lambda izraz se sastoji od tri komponente.

1) Popis argumenata: Može biti i prazna i neprazna.

2) Žeton-strelica: Koristi se za povezivanje popisa argumenata i tijela izraza.

3) Tijelo: Sadrži izraze i izjave za lambda izraz.

kako isključiti android način rada za razvojne programere

Bez sintakse parametra

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

Sintaksa jednog parametra

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

Sintaksa dva parametra

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

Pogledajmo scenarij u kojem ne implementiramo Java lambda izraz. Ovdje implementiramo sučelje bez upotrebe lambda izraza.

Bez 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(); } } 
Testirajte sada

Izlaz:

 Drawing 10 

Primjer Java Lambda izraza

Sada ćemo implementirati gornji primjer uz pomoć 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(); } } 
Testirajte sada

Izlaz:

 Drawing 10 

Lambda izraz može imati nula ili bilo koji broj argumenata. Pogledajmo primjere:

Primjer Java Lambda izraza: Nema 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()); } } 
Testirajte sada

Izlaz:

 I have nothing to say. 

Primjer Java lambda izraza: jedan parametar

 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')); } } 
Testirajte sada

Izlaz:

 Hello, Sonoo Hello, Sonoo 

Primjer Java lambda izraza: više parametara

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

Izlaz:

markdown podcrtati
 30 300 

Primjer Java Lambda izraza: sa ili bez povratne ključne riječi

U Java lambda izrazu, ako postoji samo jedna izjava, možete ili ne morate koristiti povratnu ključnu riječ. Morate koristiti ključnu riječ return kada lambda izraz sadrži više izjava.

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

Izlaz:

 30 300 

Primjer Java Lambda izraza: Foreach petlja

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

Izlaz:

 ankit mayank irfan jai 

Primjer Java Lambda izraza: Više naredbi

 @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.')); } } 
Testirajte sada

Izlaz:

 I would like to say, time is precious. 

Primjer Java Lambda izraza: Stvaranje niti

Možete koristiti lambda izraz za pokretanje niti. U sljedećem primjeru implementiramo metodu pokretanja pomoću 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(); } } 
Testirajte sada

Izlaz:

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

Java lambda izraz se može koristiti u okviru zbirke. Omogućuje učinkovit i koncizan način ponavljanja, filtriranja i dohvaćanja podataka. Slijede neki primjeri lambda i kolekcija.

Primjer Java lambda izraza: komparator

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

Izlaz:

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

Primjer Java lambda izraza: Podaci o prikupljanju filtara

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

Izlaz:

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

Primjer Java Lambda izraza: Slušatelj događaja

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

Izlaz:

Primjer rukovanja Java Lambda događajem