Reklama

Ak ste programátor jazyka Java a máte záujem dozvedieť sa viac informácií o jazykoch Java 8, v tomto článku sa bližšie pozrieme na syntax a použitie jazyka lambda.

lambda výraz v jazyku Java je stručný spôsob, ako vyjadriť metódu triedy vo výraze. Má zoznam parametrov a telo. Telo môže byť jediné výraz alebo blok 10 základných konceptov Java by ste sa mali naučiť, keď začneteČi už píšete GUI, vyvíjate softvér na strane servera alebo mobilnú aplikáciu využívajúcu Android, učenie sa Java vám bude dobre slúžiť. Tu je niekoľko základných konceptov Java, ktoré vám pomôžu začať. Čítaj viac . Zvyčajne sa používa tam, kde je potrebná implementácia rozhrania. Táto potreba zvyčajne vzniká, keď sa ako argument na vyvolanie metódy vyžaduje rozhranie.

Niektoré jednoduché Lambda výrazy

Pozrime sa na niekoľko jednoduchých príkladov lambda výrazov.

Toto je lambda výraz, ktorý akceptuje dve čísla X a y a vypočíta sumu.

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

Vynechajte typy parametrov pre stručnejšie zobrazenie:

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

Definujte funkciu, ktorá neakceptuje žiadne parametre:

() -> 404; 

Platí tiež nasledujúce, ktoré neakceptuje žiadne parametre a nevracia nič:

() -> {}

Nie sú potrebné parantézy uzatvárajúce parametre pre jeden parameter:

x -> x + 1. 

Sú tiež možné komplexnejšie bloky kódu. Nasledujúci lambda akceptuje jeden riadok parameter a robí nejaké spracovanie na to. Typ parametra sa odvodzuje z okolitého kontextu:

riadok -> { String [] x = pattern.split (riadok); návrat nového hráča (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4])); }

Čisté a stručné kódovanie

Použitie výrazov lambda pomáha vášmu kódu čistiť a stručne. V tomto smere triedy Java 8 vo veľkej miere využívajú lambdy.

Opakovanie zoznamu alebo sady

Zbierka tried ako napr zoznam, sada, frontaa tak implementovať Iterable rozhranie, ktoré značne uľahčuje opakovanie prvkov.

Vyhláste zoznam mien.

zoznam names = Arrays.asList ("Joe", "Jack", "James", "Albert"); 

Opakujte zoznam bez lambda:

pre (String name: names) {System.out.println (name); }

Pomocou lambda možno vyššie uvedenú slučku napísať ako:

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

S odkazmi na metódy Java 8 možno vyššie uvedené písať ešte stručnejšie ako:

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

Opakovanie mapy

mapa je mapovanie kľúčov na hodnoty. Opakovanie cez mapu zahŕňa opakovanie každého z (mapovania, hodnoty) mapovania. Porovnajte, ako môžete použiť lambdu pre túto situáciu.

Najprv definujte mapu:

mapa map = new 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); 

Túto mapu môžete opakovať tradičným spôsobom:

pre (Mapa. vstup e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()); }

Tu je návod, ako môžete urobiť to isté rýchlym a výstižným spôsobom s použitím lambd:

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

Funkčné rozhrania

Aký je návratový typ výrazu lambda? Inými slovami, aký je typ X v nasledujúcom vyhlásení?

X x = a -> a + 1; 

Návratový typ výrazu lambda je a funkčné rozhranie - rozhranie s jedinou abstraktnou metódou. Výrazu lambda môžete priradiť rozhraniu kompatibilnou abstraktnou metódou. Niektoré príklady uvedené nižšie.

Vytvorenie úlohy s viacerými vláknami

Zvážte vytvorenie úlohy pre vykonanie v samostatnom vlákne 4 Metódy písania viacvláknového kódu v JaveV tomto článku porovnávame niekoľko možností na písanie viacvláknového kódu v jazyku Java, aby ste mohli lepšie posúdiť, ktorú možnosť použiť pre svoj ďalší projekt Java. Čítaj viac - ste povinní definovať úlohu ako Runnable rozhranie a implementácia run () metóda. Tu Runnable je funkčné rozhranie.

trieda MyTask implementuje Runnable {... public void run () {// implementujte tu svoju úlohu System.out.println ("Spustený teraz v samostatnom vlákne."); }... }

Potom môžete vytvoriť inštanciu MyTask triedy a použiť ho na spustenie nového vlákna vykonávania.

MyTask task = new MyTask (); Vlákno vlákna = nové vlákno (úloha); thread.start (); 

Pomocou lambda, proces vytvárania Runnable sa stáva oveľa jednoduchšou. Definíciu úlohy vyššie je možné prepísať takto:

Runnable task = () -> System.out.println ("Spustený teraz v samostatnom vlákne."); 

Alebo dokonca:

Vlákno vlákna = nové vlákno (() -> System.out.println ("Teraz beží v samostatnom vlákne.")); thread.start (); 

Porovnanie pomocou porovnávača

komparátor je funkčné rozhranie na porovnávanie objektov daného typu. Definuje jednu abstraktnú metódu nazývanú porovnať () ktoré môžu byť definované pomocou lambda výrazu.

Tu je výraz lambda, ktorý vytvára komparátor použité na porovnanie reťazcov bez rozlišovania.

komparátor cmp = (x, y) -> x.compareToIgnoreCase (y); 

Raz príklad komparátor funkčné rozhranie, bolo ho možné podľa potreby znova použiť.

Tu usporiadame zoznam reťazcov vo vzostupnom poradí.

zoznam names = Arrays.asList ("Joe", "Jack", "James", "Albert"); Collections.sort (mená, cmp); names.forEach (System.out:: println); // tlačí. Albert. Jack. James. Joe. 

Vyššie uvedený zoznam je zoradený na mieste. Teraz ich môžeme vyhľadať pomocou binarySearch () nasledujúca metóda:

System.out.println ("search (Joe):" + Collections.binarySearch (mená, "Joe", cmp)); # výtlačkov. hľadať (Joe): 3. 

Výpočty maxima a minima zo zoznamu je tiež ľahké pomocou lambda.

Definujte niektoré údaje:

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

Na definovanie porovnávača použite výraz lambda:

komparátor cmpTemp = (x, y) -> Integer.compare (x, y); 

A vytlačte maximum a minimum:

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

Použitie v programovaní GUI

Lambda výrazy sú tiež veľmi užitočné pri programovaní GUI na implementáciu obsluhy udalostí. Tu je príklad použitia ovládača na klikanie na tlačidlo.

Tlačidlo JButton = nové JButton („Click Me“); button.addActionListener (e -> System.out.println („Click clicked!“)); 

A to bol rýchly pohľad na používanie lambd v Java 8.

Uľahčili vám od Java 8 váš život? Vysvetlite nižšie uvedené poznámky.