Oglas

Če ste Java programer in vas zanima več o Java 8 lambdah, vam bomo v tem članku podrobneje ogledali sintakso in uporabo lambde.

A lambda izraz v Javi je jedrnat način izražanja metode razreda v izrazu. Ima seznam parametrov in telo. Telo je lahko eno izraz ali blok 10 osnovnih pojmov Java, ki bi se jih morali naučiti, ko začneteNe glede na to, ali pišete GUI, razvijate programsko opremo na strani strežnika ali mobilno aplikacijo s sistemom Android, vam bo učenje Java dobro služilo. Tu je nekaj osnovnih konceptov Java, ki vam bodo pomagali začeti. Preberi več . Običajno se uporablja tam, kjer je potrebna izvedba vmesnika. Ta potreba se ponavadi pojavi, ko je za argument priklica metode potreben vmesnik.

Nekaj ​​preprostih lambda izrazov

Poglejmo nekaj preprostih primerov lambda izrazov.

Sledi izraz lambda, ki sprejme dve številki x in y in izračuna vsoto.

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

Za natančnejšo predstavitev spustite vrste parametrov:

(x, y) -> x + y; 

Določite funkcijo, ki ne sprejme nobenih parametrov:

instagram viewer
() -> 404; 

Velja tudi naslednje, ki ne sprejme nobenih parametrov in ne vrne ničesar:

() -> {}

Ni potrebe za parateze, ki obdajajo parametre za en parameter:

x -> x + 1. 

Možni so tudi bolj zapleteni kodni bloki. Naslednja lambda sprejema samca črta parameter in opravi nekaj obdelave na njem. Upoštevajte, da je vrsta parametra izvedena iz okoliškega konteksta:

vrstica -> { String [] x = pattern.split (vrstica); vrni novega predvajalnika (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4])); }

Čisto in jedrnato kodiranje

Uporaba lambda izrazov pomaga, da bo vaša koda čista in jedrnata. Za pomoč pri tem v razredih Java 8 veliko uporabljajo lambdas.

Preklapljanje po seznamu ali nizu

Zbirni razredi, kot so Seznam, Set, Čakalna vrsta, in tako izvajati Iterable vmesnik, ki olajša prekrivanje elementov.

Razglasite seznam imen.

Seznam imena = Arrays.asList ("Joe", "Jack", "James", "Albert"); 

Skozi seznam brez lambde:

za (Ime niza: imena) {System.out.println (ime); }

Z uporabo lambde lahko zgornjo zanko zapišemo kot:

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

Z referencami metode Java 8 lahko zgoraj navedeno napišemo še bolj jedrnato kot:

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

Prekrivanje zemljevida

A Zemljevid je preslikava ključev vrednosti. Prekrivanje po zemljevidu vključuje zanko v vsaki (ključ, vrednost) preslikavi. Primerjajte, kako lahko uporabite lambda za to situacijo.

Najprej določite zemljevid:

Zemljevid map = nov HashMap <> (); map.put ("Atlanta, Georgia", 110); map.put ("Austin, Teksas", 115); map.put ("Baltimore, Maryland", 105); map.put ("Birmingham, Alabama", 99); map.put ("Boston, Massachusetts", 98); 

Na ta zemljevid lahko privijete na tradicionalen način:

za (Zemljevid. Vstop e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()); }

Tukaj je opisano, kako lahko isto in hitro storite s pomočjo lambdas:

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

Funkcionalni vmesniki

Kakšen je povratni tip lambda izraza? Z drugimi besedami, kakšna je vrsta X v naslednji izjavi?

X x = a -> a + 1; 

Vrnitveni tip lambda izraza je a funkcionalni vmesnik - vmesnik z eno samo abstraktno metodo. Vmesniku z združljivo abstraktno metodo lahko dodelite lambda izraz. Nekaj ​​primerov spodaj.

Ustvarjanje naloge z več niti

Razmislite o ustvarjanju naloge za izvedba v ločeni niti 4 načini za pisanje kode na več niti v JavaV tem članku primerjamo nekaj možnosti za pisanje večnamenske kode v Java, tako da boste lahko bolje presodili, katero možnost uporabiti za svoj naslednji projekt Java. Preberi več - morate nalogo definirati kot Izvlečna vmesnik in izvedite teči () metoda. Tukaj Izvlečna je funkcionalni vmesnik.

razred MyTask izvaja Runnable {... javni void run () {// tu nalogo implementirajte System.out.println ("Teče v ločeni niti zdaj."); }... }

Nato lahko ustvarite primerek MyTask razred in ga uporabite za začetek nove niti izvedbe.

MyTask naloga = nov MyTask (); Niti niti = nova nit (naloga); nit.start (); 

Z uporabo lambde je postopek ustvarjanja a Izvlečna postane veliko lažje. Zgoraj definirano nalogo lahko zapišemo kot:

Runnable task = () -> System.out.println ("Teče v ločeni niti zdaj."); 

Ali celo:

Thread thread = new Thread (() -> System.out.println ("Teče v ločeni niti zdaj.")); nit.start (); 

Primerjava z uporabo primerjalnika

The Primerjalnik je funkcijski vmesnik za primerjavo predmetov določene vrste. Določa eno samo abstraktno metodo, imenovano primerjaj () ki jih lahko določimo z lambda izrazom.

Tu je izraz lambda, ki ustvarja a Primerjalnik se uporablja za primerjavo strun brez občutljivosti.

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

Ko je primerek Primerjalnik je bil ustvarjen funkcionalni vmesnik, ki ga je mogoče uporabiti po potrebi.

Tukaj razvrstimo seznam nizov v naraščajočem vrstnem redu.

Seznam imena = Arrays.asList ("Joe", "Jack", "James", "Albert"); Zbirke.sort (imena, cmp); names.forEach (System.out:: println); // odtisi. Albert. Jack. James. Joe. 

Zgoraj navedeni seznam je razvrščen po mestu. Zdaj ga lahko iščemo s pomočjo binarySearch () metoda na naslednji način:

System.out.println ("iskanje (Joe):" + Collections.binarySearch (imena, "Joe", cmp)); # odtisov. iskanje (Joe): 3. 

Z lambdami je enostavno tudi izračunavanje največ in najmanjšega seznama s seznama.

Določite nekaj podatkov:

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

Za določitev primerjalnika uporabite lambda izraz:

Primerjalnik cmpTemp = (x, y) -> Integer.compripravi (x, y); 

In natisnite največ in najmanj:

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

Uporaba v GUI programiranju

Lambda izrazi so izredno uporabni tudi v programiranju GUI-ja za izvajanje prirediteljev dogodkov. Tu je primer uporabe orodja za obdelavo gumbov.

Gumb JButton = nov JButton ("Kliknite me"); button.addActionListener (e -> System.out.println ("Kliknil gumb!")); 

In to je bil hiter pogled na uporabo lambdas v Javi 8.

So vam lambdas olajšale življenje od Java 8? Prosimo, razložite v spodnjih komentarjih.