Valósítsd meg az alapvető listaműveleteket.
Funkcionális nyelvekben az olyan listaműveletek, mint a length, a map és a reduce, nagyon gyakoriak.
Valósíts meg egy sor alapvető listaműveletet anélkül, hogy meglévő függvényeket használnál.
A megvalósítandó műveletek pontos száma és neve kurzustól függ, hogy elkerüljük a meglévő nevekkel való ütközést, de az általad megvalósítandó általános műveletek közé tartoznak:
append (adott két lista, a második lista összes elemét fűzd az első lista végéhez);concatenate (adott egy sor lista, az összes lista minden elemét fűzd össze egyetlen lapos listává);filter (adott egy predikátum és egy lista, add vissza mindazon elemek listáját, amelyekre predicate(item) igaz);length (adott egy lista, add vissza a benne lévő elemek teljes számát);map (adott egy függvény és egy lista, add vissza azoknak az eredményeknek a listáját, amelyeket úgy kapsz, hogy minden elemre alkalmazod a function(item)-et);foldl (adott egy függvény, egy lista és egy kezdő akkumulátor, hajtsd (redukáld) az egyes elemeket balról az akkumulátorba);foldr (adott egy függvény, egy lista és egy kezdő akkumulátor, hajtsd (redukáld) az egyes elemeket jobbról az akkumulátorba);reverse (adott egy lista, add vissza egy listát az összes eredeti elemmel, de fordított sorrendben).Figyelj rá, hogy a fold függvényeknek (foldl, foldr) átadott argumentumok sorrendje nem mindegy.
Java-ban az a bevált gyakorlat, hogy példánymetódusokat használj az osztálymetódusok helyett. Vannak azonban olyan helyzetek, amikor teljesen indokolt, hogy egy függvény static legyen.
Mivel a Java osztályai zártak a módosítás előtt (azaz a definíciójukon kívül nem adhatsz hozzá tagokat egy osztályhoz, ahogy más nyelvekben, például Rubyban vagy JavaScriptben megteheted), közvetlenül nem bővítheted új viselkedéssel az osztályt. Mit tegyél, ha mégis viselkedést szeretnél definiálni egy adott típushoz? Ilyenkor az idiomatikus megoldás egy segédmetódus írása.
Az ilyen jellegű metódusok gyűjteményeit gyakran „segédosztályoknak” nevezik. A JRE-n belüli ilyen osztályokra példa az Arrays és a Collections. Ebben a feladatban azt szeretnénk elérni, hogy a List rendelkezzen map(), reduce(), filter() és hasonló metódusokkal. Ez azonban nincs így, ezért statikus metódusokat használunk.
A foldLeft és a foldRight metódusok „fold” függvények, ami jól ismert fogalom a funkcionális programozás világában, az objektumorientáltban viszont kevésbé. A foldingról szóló Wikipédia-oldalon általános háttér és szignatúra- és implementációs tippek találhatók.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Java nyelvet 26 fogalom158 feladat segítségével, valódi emberi mentorálással, mindez ingyen.
Élvezd a rekurzió gyakorlati bevezetését, fedezd fel a List Ops imperatív és funkcionális alternatíváit, és merülj el a farokhívásos rekurzióban és az akkumulátorfüggvényekben.