Reklaam
Kui olete Java programmeerija ja olete huvitatud Java 8 lambdade kohta rohkem teada saama, siis käsitleme selles artiklis lähemalt lambda süntaksi ja kasutamist.
A lambda väljend Java on lühike viis klassi meetodi väljendamiseks väljendis. Sellel on parameetrite loetelu ja korpus. Keha võib olla üksik väljend või blokk 10 peamist Java kontseptsiooni, mida peaksite alustama õppimaOlenemata sellest, kas kirjutate GUI-d, arendate serveripoolset tarkvara või Androidi kasutades mobiilirakendust, teenib Java õppimine teid hästi. Siin on mõned Java peamised mõisted, mis aitavad teil alustada. Loe rohkem . Seda kasutatakse tavaliselt siis, kui on vaja liidese rakendamist. See vajadus tekib tavaliselt siis, kui meetodi esilekutsumiseks on vaja liidest.
Mõned lihtsad lambdaväljendid
Vaatame mõnda lihtsat näidet lambda-väljenditest.
Järgnev on lambda-avaldis, mis võtab vastu kaks numbrit x ja y ja arvutab summa.
(int x, int y) -> x + y;
Lühendage parameetrite tüübid täpsemaks esitamiseks:
(x, y) -> x + y;
Määrake funktsioon, mis ei aktsepteeri ühtegi parameetrit:
() -> 404;
Kehtib ka järgmine, mis ei aktsepteeri ühtegi parameetrit ega tagasta midagi:
() -> {}
Pole vaja ühe parameetri parameetreid ümbritsevaid parantheses:
x -> x + 1.
Võimalikud on ka keerukamad koodiplokid. Järgmine lambda võtab vastu singli rida parameeter ja töötleb seda. Pange tähele, et parameetri tüüp tuletatakse ümbritsevast kontekstist:
rida -> { String [] x = muster.split (joon); tagastage uus mängija (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4])); }
Puhas ja täpne kodeerimine
Lambdaväljendite kasutamine aitab muuta koodi puhtaks ja sisutihedaks. Selle abistamiseks kasutavad Java 8 klassid lambdasid laialdaselt.
Loendi või komplekti silmus
Kogumisklassid nagu Loend, Komplekt, Järjekord, ja sellised rakendavad Märkimisväärne liides, mis muudab elementide üle loopimise palju lihtsamaks.
Kuulutage nimede loetelu.
Loend nimed = Arrays.asList ("Joe", "Jack", "James", "Albert");
Liigutage loendit ilma lambdata:
jaoks (Stringi nimi: nimed) {System.out.println (nimi); }
Ülaltoodud silmuse saab lambda abil kirjutada järgmiselt:
names.forEach (nimi -> System.out.println (nimi));
Java 8 meetodi viidete korral saab ülaltoodud sõnad veelgi lahedamalt kirjutada järgmiselt:
names.forEach (System.out:: println);
Kaardil silmus
A Kaart on väärtuste kaardistamine. Kaardi ületamine hõlmab kõigi (võtmete, väärtuste) kaardistamist. Võrrelge seda, kuidas saate lambdasid selle õpetuse jaoks kasutada.
Esmalt määratlege kaart:
Kaart kaart = uus 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);
Sellel kaardil saate ringi liikuda traditsioonilisel viisil:
jaoks (kaart. Sisenemine e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()); }
Siit saate teada, kuidas saate sama teha kiirelt ja lühidalt lambdasid kasutades:
map.forEach ((k, v) -> System.out.println (k + "=>" + v));
Funktsionaalsed liidesed
Mis on lambda-avaldise tagastamise tüüp? Teisisõnu, mis tüüpi on X järgmises avalduses?
X x = a -> a + 1;
Lambda avaldise tagasitulekutüüp on a funktsionaalne liides - liides ühe abstraktse meetodiga. Ühilduva abstraktse meetodiga saate liidesele lambda-avalduse määrata. Mõned näited allpool.
Mitme keermega ülesande loomine
Kaaluge ülesande loomist domeenile täitmine eraldi lõimes 4 Java-keeles mitme lõimega koodi kirjutamise meetodidSelles artiklis võrdleme mõningaid võimalusi mitme keermestatud koodi kirjutamiseks Java-s, nii et saate paremini otsustada, millist suvandit oma järgmise Java projekti jaoks kasutada. Loe rohkem - peate määratlema ülesande a Juhitav liides ja juurutamine jooksma () meetod. Siin Juhitav on funktsionaalne liides.
klassi MyTask rakendab käivitatavat {... public void run () {// rakendage siin oma ülesanne System.out.println ("Jookseb nüüd eraldi lõime."); }... }
Seejärel saate luua eksemplari MyTask klassi ja kasutage seda uue täitmise lõime käivitamiseks.
MyTaski ülesanne = uus MyTask (); Teema niit = uus niit (ülesanne); niit.start ();
Kasutades lambdat, luuakse a Juhitav muutub palju lihtsamaks. Ülaltoodud ülesande määratlust saab ümber kirjutada järgmiselt:
Runnable task = () -> System.out.println ("Jookseb nüüd eraldi lõime.");
Või isegi:
Teema niit = uus niit (() -> System.out.println ("Jookseb nüüd eraldi lõime.")); niit.start ();
Võrdlus komparaatori abil
Võrdleja on funktsionaalne liides antud tüüpi objektide võrdlemiseks. See määratleb ühe abstraktse meetodi, mida nimetatakse võrdlema() mida saab määratleda lambda avalduse abil.
Siin on lambda-väljend, mis loob Võrdleja kasutatakse keelpillide võrdlemisel väiketähtedega.
Võrdleja cmp = (x, y) -> x.compareToIgnoreCase (y);
Kui üks kord Võrdleja funktsionaalne liides on loodud, seda saab vastavalt vajadusele uuesti kasutada.
Siin sorteerime stringide loendi kasvavas järjekorras.
Loend nimed = Arrays.asList ("Joe", "Jack", "James", "Albert"); Kollektsioonid.sort (nimed, cmp); names.forEach (System.out:: println); // prindib. Albert. Jack. James. Joe.
Ülaltoodud nimekiri on sorteeritud oma kohale. Nüüd saame seda otsida, kasutades binaarotsing () järgmine meetod:
System.out.println ("otsing (Joe):" + kogud.binarySearch (nimed, "Joe", cmp)); # prindib. otsing (Joe): 3.
Maksimaalse ja minimaalse arvutamine loendist on lambdade abil samuti lihtne.
Määratlege mõned andmed:
Loend temp = Arrays.asList (110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88);
Võrdleja määratlemiseks kasutage lambda-avaldist:
Võrdleja cmpTemp = (x, y) -> Integer.compare (x, y);
Ja printige maksimaalne ja minimaalne:
System.out.println ("Max / Min"); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp));
Kasutamine GUI programmeerimisel
Lambda-avaldised on ka GUI programmeerimisel sündmuste käitlejate rakendamisel äärmiselt kasulikud. Siin on näide nupuvajutuse käitleja kasutamisest.
JButton nupp = uus JButton ("Click Me"); button.addActionListener (e -> System.out.println ("Nupp klõpsatud!"));
Ja see oli kiire ülevaade lambdade kasutamisest Java 8-s.
Kas lambdad on teie elu Java Java 8-st alates lihtsamaks teinud? Selgitage palun allpool toodud kommentaarides.