
Michael Fisher
0
1284
199
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 podíváme blíže 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 jednoduchým výrazem nebo blokem. 10 základních koncepcí Java, které byste se měli naučit, když začnete 10 základních koncepcí Java, které byste se měli naučit, když začnete 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. . 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řetáhněte typy parametrů pro stručnější zobrazení:
(x, y) -> x + y;
Definujte funkci, která nepřijímá žádné parametry:
() -> 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:
line -> 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, Fronta, a takové implementovat Neměnný rozhraní, které značně usnadňuje opakování prvků.
Vyhlásit seznam jmen.
Seznam jmen = Arrays.asList ("Joe", "Jack", "James", "Albert");
Smyčka přes seznam bez lambda:
for (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 mapy = nový 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 (Map.Entry e: map.entrySet ()) System.out.println (e.getKey () + "=>" + e.getValue ());
Zde je návod, jak můžete udělat to samé rychlým a výstiž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 pro psaní vícevláknového kódu v Javě 4 Metody pro psaní vícevláknového kódu v Javě V tomto článku porovnáváme několik možností pro psaní víceprocesového kódu v Javě, takže můžete lépe posoudit, kterou možnost použít pro svůj další projekt Java. - jste povinni definovat úlohu jako Runnable rozhraní a implementovat běh() metoda. Tady Runnable je funkční rozhraní.
class 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 výraz lambda 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 jmen = Arrays.asList ("Joe", "Jack", "James", "Albert"); Collections.sort (jména, cmp); names.forEach (System.out :: println); // tiskne Albert Jack 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)); # print print search (Joe): 3
Výpočet maxima a minima ze seznamu je také snadné pomocí lambd.
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 výraz lambda:
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 ("Button 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.