Haladó Java beadandó, 2017. tavaszi félév

Készítsd el a fileprocessor.parser.Parseable funkcionális interfészt, amelynek típusparamétere T. A funkcionális interfész parse nevű művelete egy szöveget kap, és egy olyan lambdát ad vissza, amely T paraméterét T visszatérési értékre alakítja. A funkcionális interfésznek legyen továbbá egy combineParsers alapértelmezett törzssel ellátott művelete, amely egy listát vár a parse által kiadott típusú lambdákból, és egy olyan lambdát ad vissza, amely a T típusú paraméterére alkalmazza sorban a lambdák listájának elemeit (kivéve, ha a kapott lambda null, ekkor figyelmen kívül hagyja azt), és az így kijövő T típusú elemet adja vissza eredményként.

Készítsd el a fileprocessor.parser.ArithOperation felsorolási típust, amely valósítsa meg a fenti interfészt Integer típusparaméterrel. A felsorolási típus elemei legyenek ADD, SUB, MUL és DIV; mindegyikük kapjon a nevének megfelelő lambdát paraméterként, és tárolja azt el egy op nevű adattagba. A parse művelet olyan szöveget várjon, amely vesszővel elválasztva a felsorolási típus valamelyik elemének nevét, illetve egy számot (n) tartalmaz. Ha a bemeneti szöveg ettől eltérő formátumú, akkor null-lal térjen vissza a művelet, ha megfelelő formátumú, akkor olyan lambdával, amely a bemenő Integer paraméterére és n-re alkalmazza a felsorolási elem lambdáját.

Készítsd el a fileprocessor.FileProcessor osztályt, amelynek legyen két típusparamétere: T, amire legyen adott egy rendezés, és Parser, amelyre éljen a Parseable<T> megkötés.

Készítsd el a fileprocessor.TestProcessor osztályt, amely tartalmazzon egy paraméterezett JUnit tesztesetet. A teszteset érjen véget sikertelenül, ha 2 másodpercnél tovább futna a benne levő kód. A teszteset a következőképpen működjön.