Реклама
Ако сте Јава програмер и желите да сазнате више о Јава 8 ламбдама, у овом чланку ћемо детаљније погледати ламбда синтаксу и употребу.
А ламбда израз у Јави је сажет начин изражавања метода класе у изразу. Има листу параметара и тело. Тело може бити једно израз или блок 10 основних Јава концепата које бисте требали научити при почетку радаБез обзира да ли пишете ГУИ, развијате софтвер на страни сервера или мобилну апликацију помоћу Андроид-а, учење Јава ће вам добро послужити. Ево неких основних Јава концепата који ће вам помоћи да започнете. Опширније . Обично се користи тамо где је потребна примена интерфејса. Ова потреба обично настаје када је за аргумент за позивање методе потребан интерфејс.
Неке једноставне ламбда изразе
Погледајмо неколико једноставних примера ламбда израза.
Следи ламбда израз који прихвата два броја Икс и и и израчунава суму.
(инт к, инт и) -> к + и;
Испустите типове параметара за сажетији приказ:
(к, и) -> к + и;
Дефинишите функцију која не прихвата никакве параметре:
() -> 404;
Следи и следеће које не прихвата никакве параметре и не враћа ништа:
() -> {}
Нема потребе за паратезама које укључују параметре за један параметар:
к -> к + 1.
Могући су и сложенији блокови кодова. Следећа ламбда прихвата сингл линија параметар и врши неку обраду на њему. Имајте на уму да се тип параметра изводи из окружења:
ред -> { Стринг [] к = паттерн.сплит (линија); врати нови Плаиер (Интегер.парсеИнт (к [0]), к [1], к [2], к [3], Интегер.парсеИнт (к [4])); }
Чисто и сажето кодирање
Кориштење ламбда израза помаже да ваш код буде чист и концизан. Да би им помогли у томе, класе Јава 8 увелико користе ламбдас.
Прегледавање листе или скупа
Часови колекције као што су Листа, Комплет, Ред чекања, и тако имплементирати Итерабле интерфејс који знатно олакшава преклапање елемената.
Прогласите листу имена.
Листа имена = Арраис.асЛист ("Јое", "Јацк", "Јамес", "Алберт");
Прегледајте листу без ламбда:
фор (Име низа: намес) {Систем.оут.принтлн (име); }
Коришћењем ламбде, горња петља се може написати као:
намес.форЕацх (име -> Систем.оут.принтлн (име));
Са референцама Јава 8 методе, горе наведено се може записати још сажетије као:
намес.форЕацх (Систем.оут:: принтлн);
Прегледавање карте
А Мапа је пресликавање кључева вредности. Прегледавање карте подразумева петље преко сваког (кључа, вредности) мапирања. Упоредите како можете користити ламбдас за ову ситуацију.
Прво дефинишите мапу:
Мапа мап = нови ХасхМап <> (); мап.пут ("Атланта, Џорџија", 110); мап.пут ("Аустин, Тексас", 115); мап.пут („Балтимор, Мериленд“, 105); мап.пут ("Бирмингхам, Алабама", 99); мап.пут ("Бостон, Масачусетс", 98);
На ову карту можете прелазити петом на традиционални начин:
за (Мапа Улаз е: мап.ентриСет ()) {Систем.оут.принтлн (е.гетКеи () + "=>" + е.гетВалуе ()); }
Ево како исту ствар можете учинити на брзи и концизан начин помоћу ламбда:
мап.форЕацх ((к, в) -> Систем.оут.принтлн (к + "=>" + в));
Функционални интерфејси
Који је повратни тип ламбда израза? Другим речима, шта је врста Икс у следећој изјави?
Кс к = а -> а + 1;
Повратни тип ламбда израза је а функционални интерфејс - интерфејс са једном апстрактном методом. Ламбда изразу можете доделити интерфејс компатибилном апстрактном методом. Неке примере у наставку.
Израда задатка са више навоја
Размислите о креирању задатка за извршење у засебној нити 4 Методе за писање вишедреног кода на ЈавиУ овом чланку упоређујемо неколико опција за писање вишеслојног кода на Јави, тако да можете боље да процените коју опцију да користите за свој следећи Јава пројекат. Опширније - од вас се тражи да дефинишете задатак као Руннабле интерфејс и имплементирати трцати() метод. Ево Руннабле је функционални интерфејс.
класа МиТаск реализује Руннабле {... публиц воид рун () {// имплементирајте свој задатак овде Систем.оут.принтлн ("Покретање у засебном низу сада."); }... }
Затим можете да створите инстанцу МиТаск класе и користите га за покретање новог нити извршења.
МиТаск задатак = нови МиТаск (); Тема нити = нова Тема (задатак); тхреад.старт ();
Коришћењем ламбде, процес креирања а Руннабле постаје много лакше. Горња дефиниција задатка може се преписати као:
Руннабле таск = () -> Систем.оут.принтлн ("Покретање у засебном низу сада.");
Или чак:
Тхреад тхреад = нев Тхреад (() -> Систем.оут.принтлн ("Покретање у засебном низу сада.")); тхреад.старт ();
Поређење помоћу компаратора
Тхе Упоређивач је функционални интерфејс за поређење објеката дате врсте. Дефинише једну апстрактну методу која се зове упоредити() која се може дефинисати помоћу ламбда израза.
Ево ламбда израза који ствара а Упоређивач користи се за поређење струна без икаквог сензибилитета.
Упоређивач цмп = (к, и) -> к.цомпареТоИгнореЦасе (и);
Једном инстанца Упоређивач функционално сучеље је створено, може се поново користити према потреби.
Овде сортирамо листу низова узлазним редоследом.
Листа имена = Арраис.асЛист ("Јое", "Јацк", "Јамес", "Алберт"); Цоллецтион.сорт (имена, цмп); намес.форЕацх (Систем.оут:: принтлн); // отисци. Алберт. Јацк. Џејмс. Јое.
Претходна листа је сортирана на месту. Сада га можемо претраживати помоћу бинариСеарцх () метода на следећи начин:
Систем.оут.принтлн ("претрага (Јое):" + Цоллецтионс.бинариСеарцх (имена, "Јое", цмп)); # отисака претрага (Јое): 3.
Ламбдас је такође лако израчунати максимум и минимум са листе.
Дефинишите неке податке:
Листа темпс = Арраис.асЛист (110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88);
Употријебите ламбда израз да бисте дефинирали компаратор:
Упоређивач цмпТемп = (к, и) -> Интегер.цомпаре (к, и);
И одштампајте максимум и минимум:
Систем.оут.принтлн ("Макс. / Мин."); Систем.оут.принтлн (Цоллецтионс.мак (темпс, цмпТемп) + "/" + Цоллецтионс.мин (темпс, цмпТемп));
Употреба у ГУИ програмирању
Ламбда изрази су такође изузетно корисни у ГУИ програмирању за имплементацију поступака за обраду догађаја. Ево примера коришћења алата за обраду клика на дугме.
ЈБуттон тастер = нови ЈБуттон („кликни ме“); буттон.аддАцтионЛистенер (е -> Систем.оут.принтлн ("Дугме кликнуто!"));
А то је био брзи поглед на кориштење ламбдас у Јава 8.
Да ли су вам ламбде олакшале живот од Јава 8? Објасните у коментарима испод.