Seminář 11 (Úkoly)
Úkol č. 1
Vytvořte statickou metodu anyMatch, která bude mít dva argumenty: (i) kolekci hodnot a (ii) podmínku. Tato metoda bude vracet true, pokud některá hodnot z kolekce bude splňovat zadanou podmínku, jinak bude vracet false. Metodu vyzkoušejte pro různé typy hodnot a různé podmínky.
Úkol č. 2
Do třídy MyQueue z předchozího semináře doplňte podporu iterátoru a rozhraní Iterable. Iterátor nebude odebírat hodnoty z fronty a můžete předpokládat, že v průběhu procházení fronty nebude obsah fronty měněn.
Úkol č. 3
Do třídy MyPriorityQueue z předchozího semináře doplňte metodu forEach, která postupně (podle priority) odebere jednotlivé hodnoty z fronty a provede s nimi zadanou operaci. Můžete předpokládat, že v průběhu této operace nebude obsah fronty měněn jinak než metodou forEach.
Úkol č. 4
Vytvořte třídu RPNCalculator, která bude fungovat jako konfigurovatelná RPN kalkulačka.
Třída bude mít jednu veřejnou metodu int compute(String expression), která spočítá a vrátí hodnotu výrazu v obrácené polské notaci (např. "3 5 + 2 -").
Výpočet by měl probíhat v následujících krocích:
- výraz je rozdělen na čísla a operátory,
- a postupně se prochází zleva doprava
- pokud je na vstupu číslo, je vloženo na zásobník,
- pokud je na vstupu operátor, jsou z vrcholu zásobníku odebrány dvě hodnoty, na ty je aplikován operátor (např. operace sčítání) a výsledek je uložen zpět na zásobník.
- Výpočet končí, když je zpracován celý vstup a jako výsledek je vrácena hodnota na vrcholu zásobníku.
Konstruktoru třídy RPNCalculator bude předán slovník Map<String, BinaryOperator>, který bude definovat jednotlivé operace, se kterými kalkulačka bude umět pracovat.
Navrhněte vhodné rozhraní BinaryOperator.
Třídu vyzkoušejte použít s různými sadami operací.