Oglas
Ako ste Java programer i želite da saznate više o Java 8 lambdama, u ovom ćemo članku detaljnije pogledati lambda sintaksu i upotrebu.
lambda izraz u Javi je sažet način izražavanja metode klase u izrazu. Ima popis parametara i tijela. Tijelo može biti jedno izraz ili blok 10 osnovnih Java koncepata koje biste trebali naučiti pri početku radaBilo da pišete GUI, razvijate softver na strani poslužitelja ili mobilnu aplikaciju putem Androida, učenje Java će vam dobro poslužiti. Evo nekoliko osnovnih Java koncepata koji će vam pomoći da započnete s radom. Čitaj više . Često se koristi tamo gdje je potrebna implementacija sučelja. Ova se potreba obično javlja kada je za argument za pozivanje metode potrebno sučelje.
Neki jednostavni lambda izrazi
Pogledajmo nekoliko jednostavnih primjera lambda izraza.
Slijedi lambda izraz koji prihvaća dva broja x i y i izračunava zbroj.
(int x, int y) -> x + y;
Ispustite vrste parametara za sažetiji prikaz:
(x, y) -> x + y;
Definirajte funkciju koja ne prihvaća nikakve parametre:
() -> 404;
I ovo vrijedi, a ne prihvaća nikakve parametre i ne vraća ništa:
() -> {}
Nema potrebe za paratezama koje uključuju parametre za jedan parametar:
x -> x + 1.
Mogući su i složeniji blokovi kodova. Sljedeća lambda prihvaća singl crta parametar i vrši li neku obradu na njemu. Imajte na umu da se vrsta parametra zaključuje iz okruženja:
redak -> { String [] x = pattern.split (linija); vrati novi Player (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4])); }
Čist i koncizan kodiranje
Korištenje lambda izraza pomaže da vaš kôd bude čist i sažet. Da bi im pomogli u tome, klase Java 8 uvelike koriste lambdas.
Pregledavanje popisa ili skupa
Zbirke nastave kao što su Popis, set, Red, i tako implementirati Iterable sučelje koje olakšava petlje preko elemenata.
Proglasite popis imena.
Popis imena = Arrays.asList ("Joe", "Jack", "James", "Albert");
Pređite petom preko liste bez lambda:
for (Ime niza: names) {System.out.println (ime); }
Pomoću lambde, gornja petlja može se napisati kao:
names.forEach (ime -> System.out.println (ime));
Sa referencama Java 8 metode, gore navedeno se može napisati još sažetije kao:
imena.forEach (System.out:: println);
Pregledavanje karte
Karta je mapiranje ključeva vrijednosti. Pregledavanje karte podrazumijeva petlje preko svakog (ključa, vrijednosti) mapiranja. Usporedite kako možete koristiti lambdas za ovu situciju.
Prvo definirajte kartu:
Karta map = novi 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);
Možete preskočiti kartu na tradicionalni način:
za (Karta). ulaz e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()); }
Evo kako na brzi i koncizan način možete učiniti istu stvar koristeći lambdas:
map.forEach ((k, v) -> System.out.println (k + "=>" + v));
Funkcionalna sučelja
Koji je povratni tip lambda izraza? Drugim riječima, što je vrsta x u sljedećoj izjavi?
X x = a -> a + 1;
Povratna vrsta lambda izraza je a funkcionalno sučelje - sučelje s jednom apstraktnom metodom. Lambda izrazu možete dodijeliti sučelje kompatibilnom apstraktnom metodom. Neki primjeri u nastavku.
Izrada zadatka s više navoja
Razmislite o stvaranju zadatka za izvršenje u zasebnoj niti 4 načina pisanja višereznog koda na JaviU ovom članku uspoređujemo nekoliko mogućnosti pisanja višeslojnog koda na Javi, tako da možete bolje procijeniti koju opciju koristiti za svoj sljedeći Java projekt. Čitaj više - od vas se mora definirati kao zadatak Runnable sučelje i implementirati trčanje() metoda. Ovdje Runnable je funkcionalno sučelje.
klasa MyTask implementira Runnable {... javno void run () {// implementirajte svoj zadatak ovdje System.out.println ("Pokretanje u zasebnom nizu sada."); }... }
Tada možete stvoriti instancu MyTask klase i pomoću njega pokrenuti novu nit izvršenja.
MyTask zadatak = novi MyTask (); Navoj niti = novi Konac (zadatak); thread.start ();
Korištenje lambde, postupak stvaranja a Runnable postaje mnogo lakše. Gornja definicija zadatka može se prepisati kao:
Runnable task = () -> System.out.println ("Sada se izvodi u zasebnom nizu.");
Ili čak:
Thread thread = new Thread (() -> System.out.println ("Pokretanje u zasebnom niti sada.")); thread.start ();
Usporedba pomoću komparatora
komparator je funkcionalno sučelje za usporedbu objekata određenog tipa. Ona definira jednu apstraktnu metodu koja se zove usporediti () što se može definirati pomoću lambda izraza.
Evo lambda izraza koji stvara a komparator koristi se za usporedbu žica bez ikakve osjetljivosti.
komparator cmp = (x, y) -> x.compareToIgnoreCase (y);
Jednom instanca komparator funkcionalno sučelje je stvoreno i može se koristiti po potrebi.
Ovdje sortiramo popis nizova uzlaznim redoslijedom.
Popis imena = Arrays.asList ("Joe", "Jack", "James", "Albert"); Zbirke.sort (imena, cmp); imena.forEach (System.out:: println); // otisci. Albert. Jack. James. Je Joe.
Gornji je popis sortiran na mjestu. Sada ga možemo pretraživati pomoću binarySearch () metoda kako slijedi:
System.out.println ("pretraživanje (Joe):" + Collections.binarySearch (imena, "Joe", cmp)); # otisaka. traži (Joe): 3.
Izračunavanje maksimuma i minimuma s popisa također je jednostavno uz korištenje lambdasa.
Definirajte neke podatke:
Popis temps = Arrays.asList (110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88);
Upotrijebite lambda izraz da biste definirali usporednik:
komparator cmpTemp = (x, y) -> Integer.compare (x, y);
I ispisati maksimum i minimum:
System.out.println ("Maks. / Min."); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp));
Upotreba u GUI programiranju
Lambda izrazi su također izuzetno korisni u GUI programiranju za implementaciju alata za obradu događaja. Evo primjera upotrebe alata za obradu klikova s gumbom.
JButton gumb = novi JButton ("klikni me"); button.addActionListener (e -> System.out.println ("gumb pritisnut!"));
A to je bio brzi pogled na korištenje lambda u Javi 8.
Jesu li vam lambde olakšale život od Java 8? Objasnite u komentarima u nastavku.