O introducere rapidă în Java 8 Lambdas
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.