reklama

Pokud jste programátor Java a máte zájem dozvědět se více o lambdách Java 8, v tomto článku se podrobněji podíváme na syntaxi a použití lambda.

A lambda výraz v jazyce Java je výstižný způsob vyjádření metody třídy ve výrazu. Má seznam parametrů a tělo. Tělo může být jediné výraz nebo blok 10 základních konceptů Java, které byste se měli naučit při zahájeníAť už píšete GUI, vyvíjíte software na straně serveru nebo mobilní aplikaci pomocí Androidu, učení Java vám bude dobře sloužit. Zde je několik základních konceptů Java, které vám pomohou začít. Přečtěte si více . Obvykle se používá tam, kde je vyžadována implementace rozhraní. Tato potřeba obvykle vzniká, když je jako argument pro vyvolání metody zapotřebí rozhraní.

Některé jednoduché Lambda výrazy

Podívejme se na několik jednoduchých příkladů lambda výrazů.

Následuje výraz lambda, který přijímá dvě čísla X a y a vypočítá částku.

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

Přetažení typů parametrů pro stručnější zobrazení:

(x, y) -> x + y; 

Definujte funkci, která nepřijímá žádné parametry:

instagram viewer
() -> 404; 

Platí také následující, které nepřijímá žádné parametry a nevrací nic:

() -> {}

Není třeba parantéz uzavírajících parametry pro jeden parametr:

x -> x + 1. 

Jsou také možné složitější bloky kódu. Následující lambda přijímá jeden řádek parametr a provede nějaké zpracování na to. Typ parametru je odvozen z okolního kontextu:

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

Čisté a stručné kódování

Použití výrazů lambda pomáhá zajistit čistý a výstižný kód. Abychom tomu pomohli, třídy Java 8 hojně využívají lambdy.

Opakování seznamu nebo sady

Sběratelské třídy jako Seznam, Soubor, Frontaa takové implementovat Neměnný rozhraní, které značně usnadňuje opakování prvků.

Vyhlásit seznam jmen.

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

Smyčka přes seznam bez lambda:

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

Pomocí lambda lze výše uvedenou smyčku napsat jako:

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

S odkazy na metody Java 8 lze výše uvedené informace psát ještě stručněji:

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

Opakování přes mapu

A Mapa je mapování klíčů na hodnoty. Opakování přes mapu zahrnuje opakování každého z mapování (klíč, hodnota). Porovnejte, jak můžete pro tuto situaci použít lambdy.

Nejprve 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); 

Tuto mapu můžete opakovat tradičním způsobem:

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

Zde je návod, jak můžete udělat to samé rychlým a stručným způsobem pomocí lambd:

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

Funkční rozhraní

Jaký je návratový výraz výrazu lambda? Jinými slovy, jaký je typ X v následujícím prohlášení?

X x = a -> a + 1; 

Návratový typ výrazu lambda je funkční rozhraní - rozhraní s jedinou abstraktní metodou. Výrazu lambda můžete přiřadit rozhraní kompatibilní abstraktní metodou. Některé příklady níže.

Vytvoření úlohy s více podprocesy

Zvažte vytvoření úlohy pro provedení v samostatném vlákně 4 Metody psaní vícevláknového kódu v JavěV tomto článku porovnáváme několik možností psaní vícevláknového kódu v Javě, takže můžete lépe posoudit, kterou možnost použít pro svůj další projekt Java. Přečtěte si více - jste povinni definovat úlohu jako Runnable rozhraní a implementovat běh() metoda. Tady Runnable je funkční rozhraní.

třída MyTask implementuje Runnable {... public void run () {// implementujte zde svůj úkol System.out.println ("Spustit nyní v samostatném vlákně."); }... }

Potom můžete vytvořit instanci Můj úkol třídy a použít jej ke spuštění nového vlákna provádění.

MyTask task = new MyTask (); Thread thread = new Thread (task); thread.start (); 

Pomocí lambda, proces vytváření a Runnable se stává mnohem jednodušší. Výše definici úkolu lze přepsat takto:

Runnable task = () -> System.out.println ("Nyní běží v samostatném vlákně."); 

Nebo dokonce:

Thread thread = new Thread (() -> System.out.println ("Nyní běží v samostatném vláknu.")); thread.start (); 

Porovnání pomocí komparátoru

Komparátor je funkční rozhraní pro porovnávání objektů daného typu. Definuje jedinou abstraktní metodu nazvanou porovnat () které lze definovat pomocí výrazu lambda.

Zde je lambda výraz vytvářející Komparátor použité k porovnání řetězců bez rozlišování.

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

Jednou instance Komparátor funkční rozhraní bylo vytvořeno, lze jej podle potřeby znovu použít.

Zde uspořádáme seznam řetězců ve vzestupném pořadí.

Seznam names = Arrays.asList ("Joe", "Jack", "James", "Albert"); Collections.sort (jména, cmp); names.forEach (System.out:: println); // tiskne. Albert. Zvedák. James. Joe. 

Výše uvedený seznam je seřazen na místě. Nyní ji můžeme prohledat pomocí binarySearch () takto:

System.out.println ("search (Joe):" + Collections.binarySearch (jména, "Joe", cmp)); # tisky. hledat (Joe): 3. 

Výpočet maxima a minima ze seznamu je také snadné pomocí lambdas.

Definujte některá data:

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

Pro definování komparátoru použijte lambda výraz:

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

A vytiskněte maximum a minimum:

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

Použití v programování GUI

Lambda výrazy jsou také velmi užitečné v programování GUI k implementaci obsluhy událostí. Zde je příklad použití popisovače kliknutí na tlačítko.

Tlačítko JButton = nové JButton ("Click Me"); button.addActionListener (e -> System.out.println ("Click clicked!")); 

A to byl rychlý pohled na používání lambd v Java 8.

Usnadnili jste si život od Java 8? Vysvětlete prosím níže uvedené komentáře.