реклама

Ако сте Java програмист и се интересувате да научите повече за ламбдатите на Java 8, в тази статия ще разгледаме по-подробно синтаксиса и използването на ламбда.

А ламбда израз в Java е кратък начин за изразяване на метод на клас в израз. Той има списък с параметри и тяло. Тялото може да бъде единично израз или блок 10 основни понятия за Java, които трябва да научите, когато започнетеНезависимо дали пишете GUI, разработвате софтуер от страна на сървъра или мобилно приложение с Android, ученето на Java ще ви служи добре. Ето някои основни Java понятия, които ще ви помогнат да започнете. Прочетете още . Обикновено се използва там, където се изисква внедряване на интерфейс. Тази нужда обикновено възниква, когато се изисква интерфейс като аргумент за извикване на метод.

Някои прости ламбда изрази

Нека разгледаме някои прости примери за ламбда изрази.

По-долу е ламбда израз, който приема две числа х и ш и изчислява сумата.

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

Пуснете типовете параметри за по-кратко представяне:

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

Определете функция, която не приема параметри:

() -> 404; 

Следното е валидно също, което не приема никакви параметри и не връща нищо:

() -> {}

Няма нужда от парантези, затварящи параметри за един параметър:

x -> x + 1. 

Възможни са и по-сложни кодови блокове. Следващата лямбда приема сингъл линия параметър и прави някаква обработка върху него. Обърнете внимание, че типът параметър се извежда от заобикалящия контекст:

ред -> { String [] x = pattern.split (линия); върнете нов Player (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4])); }

Чисто и сбито кодиране

Използването на ламбда изрази помага да направите кода си чист и кратък. За да помогнат в това, класовете Java 8 използват широко ламбда.

Превързване през списък или набор

Колекционни класове като списък, Комплект, Опашка, и прилагат това Iterable интерфейс, който прави привързването на елементите много по-лесно.

Обявете списък с имена.

списък имена = Arrays.asList ("Джо", "Джак", "Джеймс", "Алберт"); 

Цикъл върху списъка без лямбда:

for (Име на низ: имена) {System.out.println (име); }

Използвайки ламбда, горният цикъл може да бъде написан като:

names.forEach (име -> System.out.println (име)); 

С препратките към метода на Java 8, горното може да бъде написано още по-кратко като:

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

Превързване върху карта

А карта е картографиране на ключовете към стойностите. Превързването на карта включва прикачване към всяко от (ключ, стойност) картографиране. Сравнете как можете да използвате ламбда за тази ситуация.

Първо определете карта:

карта map = нов HashMap <> (); map.put ("Атланта, Джорджия", 110); map.put ("Остин, Тексас", 115); map.put ("Балтимор, Мериленд", 105); map.put ("Бирмингам, Алабама", 99); map.put ("Бостън, Масачузетс", 98); 

Можете да прекарате курсора върху тази карта по традиционния начин:

за (Карта. влизане e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()); }

Ето как можете да направите същото по бърз и кратък начин, като използвате ламбда:

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

Функционални интерфейси

Какъв е връщащият тип ламбда-израз? С други думи, какъв е типът х в следващото изявление?

X x = a -> a + 1; 

Върнатият тип ламбда-израз е a функционален интерфейс - интерфейс с един абстрактен метод. Можете да зададете ламбда-израз на интерфейс със съвместим абстрактен метод. Няколко примера по-долу.

Създаване на задача с много нишки

Помислете за създаване на задача за изпълнение в отделна тема 4 метода за писане на многонишков код в JavaВ тази статия сравняваме няколко опции за писане на многопоточен код в Java, така че можете по-добре да прецените коя опция да използвате за следващия си Java проект. Прочетете още - от вас се изисква да определите задачата като Изпълнима интерфейс и внедряване на тичам () метод. Тук Изпълнима е функционален интерфейс.

клас MyTask внедрява Runnable {... public void run () {// реализирайте вашата задача тук System.out.println ("Работете в отделна тема сега."); }... }

След това можете да създадете екземпляр на MyTask клас и го използвайте за стартиране на нова нишка на изпълнение.

MyTask задача = нов MyTask (); Конец за конци = нова тема (задача); thread.start (); 

Използвайки ламбда, процесът на създаване на a Изпълнима става много по-лесно. Дефиницията на задачата по-горе може да бъде пренаписана като:

Runnable task = () -> System.out.println ("Работи в отделна тема сега."); 

Или дори:

Thread thread = new Thread (() -> System.out.println ("Работи в отделна тема сега.")); thread.start (); 

Сравнение с помощта на сравнител

Най- сравняване е функционален интерфейс за сравняване на обекти от даден тип. Той определя един единствен абстракт, наречен метод сравни () което може да се определи с помощта на ламбда-израз.

Ето ламбда израз, създаващ a сравняване използва се за сравняване на струните без значение.

сравняване cmp = (x, y) -> x.compareToIgnoreCase (y); 

Веднъж инстанция на сравняване функционален интерфейс е създаден, той може да бъде използван повторно според нуждите.

Тук подреждаме списък от низове във възходящ ред.

списък имена = Arrays.asList ("Джо", "Джак", "Джеймс", "Алберт"); Collections.sort (имена, cmp); names.forEach (System.out:: println); // отпечатъци. Алберт. Джак. Джеймс. Джо. 

Списъкът по-горе е сортиран на място. Вече можем да го търсим с помощта на binarySearch () метод както следва:

System.out.println ("търсене (Joe):" + Collections.binarySearch (имена, "Joe", cmp)); # отпечатъци търсене (Джо): 3. 

Изчисляването на максимум и минимум от списък също е лесно с помощта на ламбда.

Определете някои данни:

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

Използвайте лямбда израза, за да определите сравнителя:

сравняване cmpTemp = (x, y) -> Integer.compare (x, y); 

И отпечатайте максималния и минималния:

System.out.println ("Макс / Мин"); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp)); 

Използване в GUI програмиране

Ламбда изразите също са изключително полезни в GUI програмирането за прилагане на обработващи събития. Ето пример за използване на манипулатор за натискане на бутон.

Бутон JButton = нов JButton ("Кликни върху мен"); button.addActionListener (e -> System.out.println ("Бутон кликна!")); 

И това беше бърз поглед върху използването на ламбдаи в Java 8.

Ламбда ли улесни живота ви след Java 8? Моля, обяснете в коментарите по-долу.