Hirdetés

Ha Java programozó vagy, és szeretne többet megtudni a Java 8 lambda-ról, ebben a cikkben közelebbről megismerjük a lambda szintaxisát és használatát.

A lambda kifejezés a Java-ban egy osztály módszerének kifejezésében tömör módon kifejezhetők. Van egy paraméterek listája és egy test. A test lehet egyetlen kifejezés vagy blokk 10 alapvető Java koncepció, amelyeket meg kell tanulnia az induláskorFüggetlenül attól, hogy GUI-t ír, fejleszti a szerveroldali szoftvert vagy egy mobilalkalmazást az Android segítségével, a Java tanulása jól szolgálja Önt. Az alábbiakban bemutatunk néhány alapvető Java-koncepciót, amelyek segítenek az indulásban. Olvass tovább . Általában akkor használják, ha felület megvalósítására van szükség. Ez a szükség általában akkor merül fel, amikor interfészre van szükség egy módszer meghívásának argumentumaként.

Néhány egyszerű Lambda kifejezés

Nézzünk néhány egyszerű példát a lambda kifejezésekre.

Az alábbiakban egy lambda kifejezést használunk, amely két számot elfogad x és y és kiszámítja az összeget.

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

Dobja át a paraméter típusokat a tömörebb ábrázolás érdekében:

(x, y) -> x + y; 

Definiáljon olyan funkciót, amely nem fogad el paramétereket:

() -> 404; 

Az alábbiak is érvényesek, amelyek nem fogadnak el paramétereket és semmit sem adnak vissza:

() -> {}

Nincs szükség paramétert körülvevő parantézisekhez egyetlen paraméterhez:

x -> x + 1. 

Bonyolultabb kódblokkok szintén lehetséges. A következő lambda elfogad egyet vonal paramétert, és végez némi feldolgozást rajta. Vegye figyelembe, hogy a paraméter típusa a környező környezetből következtethető:

sor -> { Karakterlánc [] x = pattern.split (vonal); új lejátszó visszaadása (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4])); }

Tiszta és tömör kódolás

A lambda kifejezések használata elősegíti, hogy a kód tiszta és tömör legyen. Ennek elősegítésére a Java 8 osztályok széles körben használják a lambda-kat.

Kihúzás egy listán vagy halmazon

Gyűjtemény osztályok, mint például Lista, Készlet, sorban áll, és ilyen módon valósítják meg a Iterable interfész, amely sokkal könnyebbé teszi az elemek hurkolását.

Nyújtsa be a nevek listáját.

Lista nevek = Arrays.asList ("Joe", "Jack", "James", "Albert"); 

Húzza át a listát lambda nélkül:

for (Karakterlánc neve: nevek) {System.out.println (név); }

A lambda használatával a fenti hurok így írható:

names.forEach (név -> System.out.println (név)); 

A Java 8 módszerrel történő referenciákkal a fentiek még tömörebben írhatók:

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

Hurok egy térképen

A Térkép az értékek kulcsának feltérképezése. A térkép áthúzása magában foglalja az összes (kulcs, érték) leképezés áthúzását. Hasonlítsa össze, hogyan lehet a lambdákat használni ebben a helyzetben.

Először definiáljon egy térképet:

Térkép térkép = új 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); 

A térképet hagyományos módon áthúzhatja:

(Térkép. Belépés e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()); }

Így végezheti el ugyanazt a dolgot gyorsan és tömör módon a lambda segítségével:

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

Funkcionális interfészek

Mi a lambda kifejezés visszatérő típusa? Más szavakkal, milyen típusú x a következő állításban?

X x = a -> a + 1; 

A lambda kifejezés visszatérési típusa a funkcionális interfész - interfész egyetlen elvont módszerrel. Kompatibilis elvont módszerrel hozzá lehet rendelni egy lambda kifejezést egy interfészhez. Néhány példa az alábbiakban.

Többszálú feladat létrehozása

Fontolja meg a feladat létrehozását végrehajtás külön szálban 4 Módszer a többszálú kód írásához a Java-banEbben a cikkben összehasonlítunk néhány lehetőséget a többszálú kód írására a Java-ban, így jobban meg tudja ítélni, hogy melyik lehetőséget használja a következő Java-projekthez. Olvass tovább - meg kell határoznia a feladatot a futtatható interfész és a fuss() eljárás. Itt futtatható egy funkcionális interfész.

osztály MyTask végrehajtja a Runnable {... public void run () {// itt végezze el a feladatát System.out.println ("Most egy külön szál fut."); }... }

Ezután létrehozhat egy példányt a Az én feladatom osztályba, és felhasználhatja egy új végrehajtási szál elindítására.

MyTask feladat = új MyTask (); Menet szál = új szál (feladat); thread.start (); 

Lambda segítségével a futtatható sokkal könnyebbé válik. A fenti feladatdefiníció így átírható:

Futtatható feladat = () -> System.out.println ("Most egy külön szál fut."); 

Vagy akár:

Szálat = új szál (() -> System.out.println ("Most egy külön szál fut.")); thread.start (); 

Összehasonlítás összehasonlító használatával

Az összehasonlító egy funkcionális interfész egy adott objektum összehasonlításához. Meghatározza az egyetlen elvont módszert, az úgynevezett össze () amelyek meghatározhatók lambda kifejezéssel.

Itt található egy lambda kifejezés, amely a összehasonlító arra használták, hogy a húrokat eset-érzéketlenül hasonlítsák össze.

összehasonlító cmp = (x, y) -> x.compareToIgnoreCase (y); 

Egyszer a összehasonlító létrehozták a funkcionális interfészt, szükség szerint újra felhasználhatók.

Itt a húrok listáját növekvő sorrendbe rendezzük.

Lista nevek = Arrays.asList ("Joe", "Jack", "James", "Albert"); Gyűjtemények.sort (név, cmp); names.forEach (System.out:: println); // nyomtat. Albert. Jack. James. Joe. 

A fenti lista a helyére van rendezve. Most megkereshetjük a binarySearch () a következő módszer:

System.out.println ("keresés (Joe):" + Collections.binarySearch (név, "Joe", cmp)); # nyomatok. keresés (Joe): 3. 

A maximális és minimum kiszámítása a listából a lambda-k segítségével is egyszerű.

Adjon meg néhány adatot:

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

Használjon lambda kifejezést az összehasonlító meghatározásához:

összehasonlító cmpTemp = (x, y) -> Integer.compare (x, y); 

És nyomtassa ki a maximumot és a minimumot:

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

Használja a GUI programozásban

A Lambda kifejezések rendkívül hasznosak a GUI programozásában is az eseménykezelők megvalósításához. Íme egy példa a gombkattintás-kezelő használatára.

JButton gomb = új JButton ("Click Me"); button.addActionListener (e -> System.out.println ("Gomb kattintva!")); 

És ez egy rövid pillantás a lambdas használatára a Java 8-ban.

A lambda megkönnyítette az életét a Java 8 óta? Kérjük, magyarázza el az alábbi megjegyzésekben.