Blog

Java 8

Learn2Code tím - 19.09.2018 - Tipy a triky

Java 8 je veľký balíček novej funkcionality oproti Java 9 a java 10. Tie sú menšie a odzrkadľujú taktiku tvorcov javy vydávať nové verzie častejšie s menším balíkom novej funkcionality. V tomto článku si povieme najvýraznejšie zmeny z Java 8.

Funkcionálne rozhrania

Rozhranie, ktoré má len jednu abstraktnú metódu je považované za funkcionálne rozhranie. Pre lepšie načrtnutie v kóde môžeme a je odporúčané pridať anotáciu @FunctionalInterface.

import java.lang.FunctionalInterface;

@FunctionalInterface public interface FunctionalInterfaceExample {     void print(); }

Lambda výrazy

Ok, chceme pridať do javy možnosť definovať funkcionalitu bez toho aby patrila špecificky pod nejakú triedu. Tieto funkcie chceme vkladať do metód ako parametre. Čo spravíme? Tvorcovia javy sa asi takto nezamýšľali, ale my sme sa takto zamysleli a odpoveď je – použijeme lambda výrazy.

Každá lambda má ako typ funkcionálne rozhranie s jej odpovedajúcou metódou. V príklade vyššie máme rozhranie s metódou print. Táto metóda nevracia nič a neprijíma žiadne parametre. Musíme vytvoriť aj taký lambda výraz – teda nebude obsahovať return a nebudeme mať žiadne návratové hodnoty.

() -> System.out.println("Hello Word")

Takto vložíš lambda výraz do metódy:

printHelloWord(() -> System.out.println("Hello Word"));

Samotná metóda prijíma na vstupe práve dané funkcionálne rozhranie:

public void printHelloWord2(FunctionalInterfaceExample printHello)

Viac o lambda výrazoch sa dozvieš z môjho online kurzu Java pre pokročilých, videá o lambda výrazoch sú zadarmo.

Streams

Streamy poskytujú zjednodušenú prácu s dátovými kolekciami. Poskytujú viacero užitočných metód ako sú napríklad filter, sorted, map a iné. Ak stream préjde cez všetky elementy v kolekcii, tak bude prázdny. Teda ak chcem znovu použiť ten istý stream, tak zbytočne, lebo tam už nebudú dáta. Musíš si vytvoriť nový stream.

Nový stream vytvoríš napríklad pomocou stream metódy nad kolekciami.

List<Osoba> osoby = Arrays.asList(
         null,
         new Osoba("Jaro", "Beno", 30),
         new Osoba("Peter", "Kridlo", 55),
         new Osoba("Karol", "Otko", 18),
         new Osoba("Karol", "Beno", 18),
         new Osoba("Peter", "Otko", 20),
         new Osoba("Fedor", "Ronald", 84)
 );
 
 osoby.stream();

Máš zoznam osôb a chceš z daného zoznamu získať všetky veky osôb starších ako 50 rokov a majú byť zoradené podľa veku. Čo spravíš? Použiješ stream a jeho metódy – tieto metódy akceptujú funkcionálne rozhrania, teda tam dáš lambda výrazy.

List<Integer> veky = osoby.stream()
         .filter(osoba -> osoba.getVek() < 50)
         .sorted(Comparator.comparing(Osoba::getVek))
         .map(Osoba::getVek)
         .collect(Collectors.toList());

Kolekcie, ktoré sú iterovateľné, majú metódu forEach – ktorá získa stream a prejde všetky elementy.

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

 

Method reference

Po slovensky referencia na metódu. Všimni si príklad z hora: Osoba::getVek. Znamená to, že z triedy Osoba použi metódu getVek. To isté sa dá zapísať aj pomocou lambda výrazu takto osoba -> osoba.getVek(). Ale pomocou referencie si to zjednodušíme lebo java vie, aký je vstupný parameter – je to osoba a vie, že voláš getVek. Tak stačí napísať Osoba::getVek. Metódu voláš bez zátvoriek.


Ďalší článok o Jave už čoskor. Prihlás sa k odberu noviniek a nezmeškaj žiadný nový blog.

 


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.


Websockety vo Flasku

Tipy a triky

Websockety vo Flasku Ak si sa niekedy stretol s výrazom websocket a chcel by si sa dozvedieť, čo to vlastne je a ako sa to používa v Python aplikácii,...

7 dôvodov, prečo sa ľudia na vašom webe neregistrujú

Tipy a triky

Weby sú o biznise. A teraz nemám na mysli vývojárske firmy a mladé dynamické “desing studios”. Hovorím o biznise ako takom - o činnosti, pri ktorej sa...

Ako vie programátor samouk dobehnúť tých, čo študovali na univerzite

Tipy a triky

Čo sa učia na univerzitách Si programátor samouk a rozmýšľaš, ako to vyzerá na univerzite? Už máš pozreté všetky online kurzy, 10 vlastných projektov a...