Blog

Lambda výrazy v Jave - časť II.

Learn2Code tím - 23.08.2019 - Tipy a triky

Typy lambda výrazov

Tento článok je pokračovaním prvej časti tutoriálu o Lambda výrazoch. Vráťme sa k nášmu príkladu na začiatku, kde sme do metódy vložili implementáciu rozhrania a zavolali sme metódu. Toto si teraz skúsime spolu prerobiť, tak aby sme použili lamba výraz.  HelloWord2.

Prepíšme metódu implementácie na lambda výraz.

public void sayHello() {
    System.out.println("HelloWord impls");
}
() -> System.out.println("HelloWord impls");


Znovu tá istá otázka, aký typ má lamba výraz ak ho chcem priradiť do premennej?

lambdaFunkcia = () -> System.out.println("HelloWord impls");

Počkať! V Jave predsa máme možnosť ako deklarovať, vymenúvať metódy a tú použijeme. Tou možnosťou je použiť rozhrania.

  1. vytvorenie rozhrania s jednou deklaráciou metódy
  2. vytvorenie metódy, ktorá odpovedá našemu lambda výrazu
    1. v našom prípade nemá žiadne argumenty a návratová hodnota je void

Ak by sme vytvorili rozhranie, kde budeme uvádzať viacero metód, tak to bude chyba. Jedine ak budú default – teda implementované. Viď sekciu o rozhraniach.

ILambda lambdaFunkcia = () -> System.out.println("HelloWord impls");
…
public interface ILambda {
    void metoda();
//    void metoda2(String s); // bude error
}

Použime lambda výraz s bezpečným delením. Napíšme si k tomu interface a premennú:

bezpecneDelenieFunkcia = (int a, int b) -> {
     if(b==0) {
          return 0 ;
     }
     return a/b;
};


public static void main(String[] args) {
    Hocijako hocijako = (int a, int b) -> {
        if(b==0){
            return 0;
        }
        return a/b;
    };
    double d = hocijako.hocico(10, 2);
    System.out.println(d);
}
interface Hocijako{
    double hocico(int x, int y);
}

Tu si môžeme povedať, že názov rozhrania a názov metódy v rozhraní nie je dôležitý. Dôležité je, aby sedeli vlastnosti. Teda rozhranie má len jednu metódu (mimo default metód) a metóde sedí typ návratovej hodnoty a parametre metódy.

Implemetačnú triedu už teda nepotrebujeme, lebo akoby implementáciou je lambda výraz. Môžem si to nechať, ak to potrebujem takto používať, ale v našom prípade nepotrebujem implementačnú triedu.

Lambda výraz sa správa ako implemtnácia rozhrania. Ale nie je to implementácia. Tento príklad bude fungovať:

HelloWord3 helloWord = new HelloWord3();
IHelloWord helloWord1 = new HelloWordImpl();
IHelloWord helloWord2 = () -> System.out.println("HelloWord impls lambda");
helloWord1.sayHello();
helloWord2.sayHello();

Na výstupe bude:

HelloWord impls

HelloWord impls lambda

Pokračovanie nabudúce 😗 Mrkni zatiaľ moje kurzy o Java programovaní alebo videá, ktoré máme na Youtube o Lambda výrazoch: https://www.youtube.com/watch?v=tzSFOgnDZZo&list=PL5dKLQR6-HyU7jyoTuZGFmPLAEFpIumi4


Logo facebook

Learn2Code tím

Učíme ľudí dizajnovať, robiť webstránky a programovať. Naše prezenčné kurzy nájdeš vo viacerých mestách na Slovensku a pomocou online kurzov sa môžeš vzdelávať z pohodlia domova.


Tipy, triky a chyby v jazyku C++ pre začiatočníkov

Tipy a triky

Týmto článkom by som vám chcel predstaviť zaujímavé tipy a triky v jazyku C++, ktoré by ste mohli použiť vo vašom kóde. Sú veľmi jednoduché, pretože sú...

Lambda výrazy v Jave - časť I.

Tipy a triky

V tomto a v nasledujúcich článkoch sa pozrieme na zúbok lambda výrazom. Budeme si ich vysvetľovať úplne dopodrobna, aby sme ich pochopili a využívali....

Tipy, ako ušetriť čas pri práci v Sketchi, Photoshope, Illustratore a InDesigne

Tipy a triky

Práca v grafických programoch sa niekedy podobá na cirkusový chaos. Ikonky, záložky, nekonečný počet nástrojov, pluginov. Vieme, je ťažké sa v tom...