Seminář 11

Obsah

Lokální a anonymní třídy

Funkční rozhraní

Vlastní funčkní rozhraní

Lambda výrazy

Jak to spolu všechno souvisí

Stream API

Ukázka

Zpětná vazba

Úkol

  1. Upravte svou RPN kalkulačku tak, aby vhodně využívala funkčních rozhraní, lambda výrazů a anonymních tříd.
  2. Upravte svou RPN kalkulačku tak, aby vše bylo řádně zdokumentováno a otestováno.
  3. Napište následující metody, které za použití třídy Files nejprve načtou textový soubor z cesty p do streamu a poté vypočítají uvedenou transformaci/agregaci tohoto streamu:
    • Optional<Double> average(Path p) pro průměr čísel z jednotlivých řádků souboru;
    • Optional<Double> evensAverage(Path p) pro průměr sudých čísel z jednotlivých řádků souboru (tj. lichá čísla do výsledku nepočítáme);
    • Optional<Double> evenMultsOfThreeAverage(Path p) pro průměr sudých násobků 3 z jednotlivých řádků souboru (tj. jiná čísla než sudé násobky 3 do výsledku nepočítáme);
    • String linesString(Path p, String delimeterWord) pro všechny řádky spojené do jednoho Stringu oddělené pomocí delimeterWord;
    • Stream<String> palindroms(Path p) pro Stream obsahující palindormy vytvořené z původních řádků zřetězením s jejich kopií pozpátku (např. řádek ahoj transformuje na řádek ahojjoha).
    U prvních tří metod můžete předpokládat, že vstupní soubory obsahují na každém řádku právě jedno číslo typu double.
  4. Výsledek odevzdejte emailem s předmětem jj1-11 na tomas.urbanec@upol.cz do 30.12.2023, 23:59 CEST. Odevzdávejte pouze zdrojové kódy, nikoliv celé projekty vygenerované IDE.