O introducere rapidă în Java 8 Lambdas

O introducere rapidă în Java 8 Lambdas / Programare

Dacă sunteți un programator Java și sunteți interesat să aflați mai multe despre Java 8 lambdas, în acest articol vom examina mai îndeaproape sintaxa lambda și utilizarea.

A expresia lambda în Java este o modalitate concisă de a exprima o metodă a unei clase într-o expresie. Are o listă de parametri și un corp. Organismul poate fi o singură expresie sau un bloc 10 Concepte Java Core Trebuie să învățați când începeți 10 Concepte Java Core Trebuie să învățați când începeți Fie că scrieți o interfață grafică, dezvoltând software-ul de pe server, sau o aplicație mobilă care utilizează Android, învățarea Java vă va servi bine. Iată câteva concepte Java core pentru a vă ajuta să începeți. Citeste mai mult . Este frecvent utilizat în cazul în care este necesară implementarea unei interfețe. Această nevoie, de obicei, apare atunci când este necesară o interfață ca argument pentru invocarea unei metode.

Unele expresii Lambda simple

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.

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

Aruncați tipurile de parametri pentru o reprezentare mai concisă:

(x, y) -> x + y; 

Definiți o funcție care nu acceptă parametri:

() -> 404; 

Sunt valabile și următoarele, care nu acceptă parametri și nu întoarce nimic:

() ->  

Nu este nevoie de paranteze care să cuprindă parametri pentru un singur parametru:

x -> x + 1 

Sunt posibile și blocuri de cod complexe. Următorul lambda acceptă un singur linia parametru și face unele prelucrare pe ea. Rețineți că tipul parametrului este dedus din contextul înconjurător:

linie -> String [] x = model.split (linie); returnează un nou Player (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4]));  

Coduri clare și concise

Utilizarea expresiilor lambda vă ajută să vă faceți codul curat și concis. Pentru a ajuta la aceasta, clasele Java 8 folosesc extensiv lambda-urile.

Înainte de o listă sau de un set

Clase de colectare, cum ar fi Listă, A stabilit, Coadă, și astfel de a pune în aplicare Iterable interfață care face mult mai ușoară looping-ul peste elemente.

Declarați o listă de nume.

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

Bucle peste listă fără lambda:

pentru (Nume șir: nume) System.out.println (nume);  

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

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

Cu referirile la metoda Java 8, cele de mai sus pot fi scrise chiar mai concis:

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

Înaintea unei hărți

A Hartă este o mapare a cheilor la valori. Împingerea peste o hartă implică reajustarea fiecărui mapare (cheie, valoare). Comparați modul în care puteți folosi lambda pentru această situație.

Definiți mai întâi o hartă:

Hartă map = nou HashMap <> (); 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 să treceți prin această hartă în mod tradițional:

pentru (Map.Entry 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 lambda:

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

Interfețele funcționale

Care este tipul de returnare a expresiei lambda? Cu alte cuvinte, care este tipul de X în următoarea declarație?

X = a -> a + 1; 

Tipul de returnare 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 multi-filetate

Luați în considerare crearea unei sarcini de execuție într-un fir separat 4 Metode pentru scrierea codului multi-file în Java 4 Metode pentru scrierea codului multi-file în Java În acest articol, vom compara câteva opțiuni pentru scrierea codului multi-threaded în Java, deci puteți judeca mai bine ce opțiune să utilizați pentru următorul proiect Java. Citiți mai mult - vi se cere să definiți sarcina ca a runnable interfață și să pună în aplicare alerga() metodă. Aici runnable este o interfață funcțională.

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

Apoi puteți crea o instanță a Sarcina mea clasa și folosiți-o pentru a începe un nou fir de execuție.

Funcția MyTask = MyTask nou (); Thread thread = nou subiect (sarcină); thread.start (); 

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

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

Sau chiar:

Thread thread = Thread nou (() -> System.out.println ("Rularea într-un thread separat acum")); thread.start (); 

Comparație Utilizarea unui comparator

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

Iată o expresie lambda care creează o comparator folosit pentru a compara șiruri de caractere insensibil.

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

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

Aici ordonăm o listă de șiruri în ordine ascendentă.

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

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

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

Calculul maxim și minim dintr-o listă este, de asemenea, ușor de utilizat folosind lambda.

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 tipăriți maximul și minimul:

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

Utilizați în programarea GUI

Expresiile Lambda sunt, de asemenea, extrem de utile în programarea GUI pentru implementarea procesatorilor de evenimente. Iată un exemplu de utilizare a unui buton de manipulare a clicurilor pe buton.

Butonul JButton = noul JButton ("Click Me"); button.addActionListener (e -> System.out.println ("Buton clicked!")); 

Și aceasta a fost o scurtă privire la utilizarea lambdas în Java 8.

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

Explorați mai multe despre: Java.