Mainos
Jos olet Java-ohjelmoija ja olet kiinnostunut oppimaan lisää Java 8 -lambdaista, tässä artikkelissa tarkastellaan lähemmin lambda-syntaksia ja käyttöä.
lambda-ilmaisu Java on tiivis tapa ilmaista luokan menetelmä lausekkeessa. Siinä on luettelo parametreista ja runko. Keho voi olla yksi lauseke tai lohko 10 ydin Java-konseptia, jotka sinun tulisi oppia aloittaessasiKirjoitatko graafista käyttöliittymää, kehität palvelinpuolen ohjelmistoa tai mobiilisovellusta Androidin avulla, Java-oppiminen palvelee sinua hyvin. Tässä on joitain Java-käsitteitä, jotka auttavat sinua pääsemään alkuun. Lue lisää . Sitä käytetään yleisesti, kun tarvitaan rajapinnan toteutus. Tämä tarve syntyy yleensä silloin, kun menetelmän käynnistämiseksi vaaditaan käyttöliittymä.
Joitakin yksinkertaisia lambda-lausekkeita
Katsotaanpa joitain yksinkertaisia esimerkkejä lambda-lausekkeista.
Seuraava on lambda-lauseke, joka hyväksyy kaksi numeroa x ja y ja laskee summan.
(int x, int y) -> x + y;
Pudota parametrityypit saadaksesi tiiviimmän esityksen:
(x, y) -> x + y;
Määritä toiminto, joka ei hyväksy parametreja:
() -> 404;
Myös seuraava on pätevä, joka ei hyväksy parametreja eikä anna mitään:
() -> {}
Yksittäisen parametrin parametreja sulkevia parantheesteja ei tarvita:
x -> x + 1.
Monimutkaisempia koodilohkoja ovat myös mahdollisia. Seuraava lambda hyväksyy yhden linja parametrilla ja käsittelee sitä jonkin verran. Huomaa, että parametrin tyyppi johdetaan ympäröivästä tilanteesta:
rivi -> { Merkkijono [] x = kuvio.jako (viiva); palauta uusi pelaaja (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4])); }
Puhdas ja tiivis koodaus
Lambda-lausekkeiden käyttö auttaa tekemään koodistasi puhtaan ja tiiviin. Tämän avuksi Java 8 -luokat hyödyntävät laajasti lambdaa.
Silmukointi luettelon tai joukon yli
Kokoelmakurssit, kuten Lista, Aseta, Jonottaa, ja tällainen toteuttaa Iterable käyttöliittymä, joka tekee elementtien kiertämisestä paljon helpompaa.
Ilmoita luettelo nimistä.
Lista nimet = Arrays.asList ("Joe", "Jack", "James", "Albert");
Siirrä luettelo ilman lambda:
varten (merkkijono: nimet) {System.out.println (nimi); }
Yllä oleva silmukka voidaan kirjoittaa lambdan avulla seuraavasti:
names.forEach (nimi -> System.out.println (nimi));
Java 8 -menetelmäviitteillä yllä olevat voidaan kirjoittaa vielä tiiviimmin seuraavasti:
names.forEach (System.out:: println);
Silmukka kartan yli
Kartta on arvojen avainten kartoitus. Kartan kiertäminen tarkoittaa, että silmukoidaan jokainen (avain, arvo) -kartta. Vertaa, kuinka voit käyttää lambdaa tässä istunnossa.
Määritä ensin kartta:
Kartta kartta = uusi 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);
Voit kiertää tämän kartan perinteisellä tavalla:
(Kartta. merkintä e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()); }
Näin voit tehdä saman asian nopeasti ja tiiviisti käyttämällä lambdaa:
map.forEach ((k, v) -> System.out.println (k + "=>" + v));
Toiminnalliset rajapinnat
Mikä on lambda-lausekkeen paluu tyyppi? Toisin sanoen, mikä on X seuraavassa lausunnossa?
X x = a -> a + 1;
Lambda-lausekkeen paluutyyppi on toiminnallinen käyttöliittymä - rajapinta yhdellä abstraktilla menetelmällä. Voit määrittää lambda-lausekkeen käyttöliittymälle yhteensopivalla abstraktilla menetelmällä. Joitakin esimerkkejä alla.
Monisäikeisen tehtävän luominen
Harkitse tehtävän luomista suorittaminen erillisessä säikeessä 4 Menetelmät monisäikeisen koodin kirjoittamiseen Java-sovellukseenTässä artikkelissa vertaamme muutamia vaihtoehtoja monisäikeisen koodin kirjoittamiseen Java-sovellukseen, jotta voit paremmin arvioida, mitä vaihtoehtoa käytetään seuraavaan Java-projektiisi. Lue lisää - Sinun on määritettävä tehtävä a runnable käyttöliittymä ja toteuttaa juosta() menetelmä. Tässä runnable on toimiva käyttöliittymä.
luokan MyTask toteuttaa Runnable {... public void run () {// toteuta tehtävä täällä System.out.println ("Suoritetaan erillisessä säikeessä nyt."); }... }
Voit sitten luoda ilmentymän Minun tehtäväni luokan ja käyttää sitä uuden suorittamisketjun aloittamiseen.
MyTask-tehtävä = uusi MyTask (); Ketjulanka = uusi säie (tehtävä); thread.start ();
Lambdan avulla luodaan prosessi runnable tulee paljon helpommaksi. Yllä oleva tehtävämäärittely voidaan kirjoittaa uudelleen seuraavasti:
Suoritettava tehtävä = () -> System.out.println ("Suoritetaan erillisessä säikeessä nyt.");
Tai jopa:
Ketjulanka = uusi säie (() -> System.out.println ("Käynnissä erillisessä säikeessä.")); thread.start ();
Vertailu vertailun avulla
vertailuryhmässä on toiminnallinen käyttöliittymä tietyn tyyppisten esineiden vertaamiseksi. Se määrittelee yhden abstraktin menetelmän nimeltä vertailla() joka voidaan määritellä käyttämällä lambda-lauseketta.
Tässä on lambda-lauseke, joka luo vertailuryhmässä käytetään vertaamaan merkkijonoja tapauskohtaisesti.
vertailuryhmässä cmp = (x, y) -> x.compareToIgnoreCase (y);
Kerran esimerkki vertailuryhmässä toiminnallinen käyttöliittymä on luotu, sitä voidaan käyttää uudelleen tarpeen mukaan.
Täällä lajittelemme luettelon merkkijonoista nousevassa järjestyksessä.
Lista nimet = Arrays.asList ("Joe", "Jack", "James", "Albert"); Collections.sort (nimet, cmp); names.forEach (System.out:: println); // tulostaa. Albert. Jack. James. Joe.
Yllä oleva luettelo on lajiteltu paikoilleen. Voimme nyt etsiä sitä käyttämällä binarySearch () seuraava menetelmä:
System.out.println ("haku (Joe):" + kokoelmat.binarySearch (nimet, "Joe", cmp)); # tulostaa. haku (Joe): 3.
Maksimi- ja minimilaskenta luettelosta on myös helppoa lambdan avulla.
Määritä tiedot:
Lista temp. = Arrays.asList (110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88);
Määritä vertailija lambda-lausekkeella:
vertailuryhmässä cmpTemp = (x, y) -> Integer.compare (x, y);
Ja tulosta suurin ja vähimmäisarvo:
System.out.println ("Max / Min"); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp));
Käyttö GUI-ohjelmoinnissa
Lambda-lausekkeet ovat myös erittäin hyödyllisiä GUI-ohjelmoinnissa tapahtumakäsittelijöiden toteuttamiseksi. Tässä on esimerkki painikkeen napsautuskäsittelijän käytöstä.
JButton-painike = uusi JButton ("napsauta minua"); button.addActionListener (e -> System.out.println ("Nappia napsautettu!"));
Ja se oli nopea katsaus lambdan käyttämiseen Java 8: ssa.
Ovatko lambdat helpottaneet elämääsi Java 8: n jälkeen? Selitä alla olevissa kommenteissa.