4it101»Java8pr 11 Reseni

Java8pr 11 Reseni

Příklad Nejdelší název - řešení

Pro řešení je přehlednější si vytvořit pomocnou metodu, která bude vracet String s vybraným názvem města. Prvním krokem je vytvořit z pole datový proud. K tomu je zapotřebí využít třídu Arrays a její metodu stream(T[] array). Jako parametr se pak dosadí výchozí pole. Výsledkem bude datový proud, jehož prvky tvoří jednotlivé názvy měst.

Tyto prvky je ale třeba redukovat tak, abychom získali pouze jeden (a to ten nejdelší). K tomu je vhodné použít metodu reduce(T identity, BinaryOperator<T> accumulator). Jako parametr identity je potřeba dosadit String, protože prvek, který bude metoda vracet, je typu String. Jelikož výstup má obsahovat pouze vybraný název, parametry identity bude mít jako hodnotu prázdný řetězec ““. Druhým parametrem je funkční rozhraní BinaryOperator<T>. Pro získání instance tohoto rozhraní se použije vhodný lambda výraz.

Abstraktní metoda tohoto funkčního rozhraní má dva parametry stejného typu T a vrací jednu hodnotu typu T. Úkolem je porovnat všechny prvky datového proudu dle délky. V tomto případě je lambda výraz složitější, a proto je vhodné použít blokový lambda výraz. V těle lambda výrazu je porovnána délka prvního názvu s délkou druhého názvu. Z nich se pak na základně podmínky if vybere ten delší. Vybraný název se pak porovná s dalším prvkem a tak dále. Nakonec se vrátí pouze ten název, který svou délkou předčí ostatní. Výše popsaný kód je ukázán níže.


public String ziskatNejdelsiNazev(String [] pole){
        return Arrays.stream(pole).reduce("", (prvni,druhe) ->{
            if(prvni.length() > druhe.length()){
                return prvni;
            }else{
                return druhe;
            }
        });
    }


 

Celkové řešení je v projektu Nejdelší název - řešení.