Publicitate

Dacă sunteți programator Java și sunteți interesat să aflați mai multe despre Java 8 lambdas, în acest articol vom arunca o privire mai atentă asupra sintaxei și utilizării lambda.

A expresie lambda în Java este un mod concis de a exprima o metodă a unei clase într-o expresie. Are o listă de parametri și un corp. Corpul poate fi un singur expresie sau bloc 10 concepte fundamentale Java pe care trebuie să le înveți la începutIndiferent dacă scrieți o GUI, dezvoltați software pentru partea serverului sau o aplicație mobilă folosind Android, învățarea Java vă va servi bine. Iată câteva concepte fundamentale Java care vă ajută să începeți. Citeste mai mult . Este frecvent utilizat în cazul în care este necesară o implementare a unei interfețe. Această nevoie apare de obicei atunci când o interfață este necesară ca argument pentru a invoca o metodă.

Câteva expresii simple Lambda

Să ne uităm la câteva exemple simple de expresii lambda.

Următoarea este o expresie lambda care acceptă două numere X și y și calculează suma.

instagram viewer
(int x, int y) -> x + y; 

Renunțați la tipurile de parametri pentru o reprezentare mai concisă:

(x, y) -> x + y; 

Definiți o funcție care nu acceptă niciun parametru:

() -> 404; 

Următorul lucru este valabil, care nu acceptă niciun parametru și nu returnează nimic:

() -> {}

Nu este nevoie de paranthezi care să includă parametrii pentru un singur parametru:

x -> x + 1. 

Sunt posibile și blocuri de cod mai complexe. Următoarea lambda acceptă un singur single linia parametru și efectuează unele prelucrări pe acesta. Rețineți că tipul parametrului este dedus din contextul înconjurător:

linie -> { String [] x = pattern.split (linie); returnează noul Player (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4])); }

Codificare curată și concisă

Utilizarea expresiilor lambda vă ajută să faceți codul dvs. curat și concis. Pentru a ajuta acest lucru, clasele Java 8 folosesc pe scară largă lambdas.

Buclați pe o listă sau pe un set

Clase de colectare cum ar fi Listă, A stabilit, Coadăși astfel de aplicații Iterable interfață care face buclarea peste elemente mult mai ușoară.

Declarați o listă de nume.

Listă names = Arrays.asList ("Joe", "Jack", "James", "Albert"); 

Buclați-vă de pe listă fără lambda:

for (String name: names) {System.out.println (nume); }

Folosind lambda, bucla de mai sus poate fi scrisă ca:

names.forEach (nume -> System.out.println (nume)); 

Cu referințele la metoda Java 8, cele de mai sus pot fi scrise chiar mai concis ca:

names.forEach (System.out:: println); 

Buclați pe o hartă

A Hartă este o mapare a tastelor valorilor. Încărcarea pe o hartă implică o buclă deasupra fiecărei mapări (cheie, valoare). Comparați cum puteți utiliza lambdas pentru această situație.

Mai întâi definiți o hartă:

Hartă hartă = HashMap nou <> (); map.put („Atlanta, Georgia”, 110); map.put („Austin, Texas”, 115); map.put („Baltimore, Maryland”, 105); map.put („Birmingham, Alabama”, 99); map.put („Boston, Massachusetts”, 98); 

Puteți face o buclă peste această hartă în mod tradițional:

pentru (Harta. Intrare e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()); }

Iată cum puteți face același lucru într-un mod rapid și concis folosind lambdas:

map.forEach ((k, v) -> System.out.println (k + "=>" + v)); 

Interfețe funcționale

Care este tipul de retur al unei expresii lambda? Cu alte cuvinte, care este tipul X în următoarea afirmație?

X x = a -> a + 1; 

Tipul de retur al unei expresii lambda este a interfață funcțională - o interfață cu o singură metodă abstractă. Puteți atribui o expresie lambda unei interfețe cu o metodă abstractă compatibilă. Câteva exemple de mai jos.

Crearea unei sarcini cu mai multe filete

Luați în considerare crearea unei sarcini pentru execuție într-un fir separat 4 Metode pentru scrierea codului multi-Threaded în JavaÎn acest articol, comparăm câteva opțiuni pentru scrierea codului multi-thread în Java, astfel încât să puteți aprecia mai bine ce opțiune să utilizați pentru următorul dvs. proiect Java. Citeste mai mult - vi se cere să definiți sarcina ca a runnable interfață și implementare alerga() metodă. Aici runnable este o interfață funcțională.

Clasa MyTask implementează Runnable {... public void run () {// implementați-vă sarcina aici System.out.println ("Se rulează acum într-un thread separat."); }... }

Puteți crea apoi o instanță a Sarcina mea clasează-l și folosește-l pentru a porni un nou thread de execuție.

Sarcina MyTask = new MyTask (); Fire thread = new Thread (task); thread.start (); 

Folosind lambda, procesul de creare a runnable devine mult mai ușor. Definiția sarcinii de mai sus poate fi rescrisă ca:

Runnable task = () -> System.out.println ("Se rulează acum într-un thread separat."); 

Sau chiar:

Thread thread = new Thread (() -> System.out.println ("Se rulează acum într-un fir separat.")); thread.start (); 

Comparație folosind un comparator

comparator este o interfață funcțională pentru compararea obiectelor de un anumit tip. Definește o singură metodă abstractă numită comparaţie() care poate fi definit folosind o expresie lambda.

Iată o expresie lambda care creează un comparator folosit pentru compararea șirurilor de caractere nesensibile.

comparator cmp = (x, y) -> x.compareToIgnoreCase (y); 

Odată o instanță a comparator a fost creată interfața funcțională, poate fi reutilizată după cum este necesar.

Aici, sortăm o listă de șiruri în ordine crescătoare.

Listă names = Arrays.asList ("Joe", "Jack", "James", "Albert"); Collections.sort (nume, cmp); names.forEach (System.out:: println); // imprimeuri. Albert. Jack. James. Joe. 

Lista de mai sus este sortată în loc. Acum îl putem căuta folosind binarySearch () metoda după cum urmează:

System.out.println ("căutare (Joe):" + Collections.binarySearch (nume, "Joe", cmp)); # imprimeuri. căutare (Joe): 3. 

Calcularea maximă și minimă dintr-o listă este de asemenea ușoară folosind lambdas.

Definiți câteva date:

Listă temps = Arrays.asList (110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88); 

Utilizați o expresie lambda pentru a defini comparatorul:

comparator cmpTemp = (x, y) -> Integer.compare (x, y); 

Și imprimați maximul și minimul:

System.out.println ("Max / Min"); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp)); 

Utilizare în programare GUI

Expresiile Lambda sunt de asemenea extrem de utile în programarea GUI pentru a implementa gestionarea evenimentelor. Iată un exemplu de utilizare a unui handler de clic pe buton.

Buton JButton = JButton new ("Faceți clic pe mine"); button.addActionListener (e -> System.out.println ("Butonul a dat clic!")); 

Și asta a fost o privire rapidă la utilizarea lambdas în Java 8.

Lambdas ți-au făcut viața mai ușoară de la Java 8? Vă rugăm să explicați în comentariile de mai jos.