Készíts el egy Pair<A,B> típust, mely egyszerre tárol egy A és egy B komponenst.
Készítsd el hozzá a következő metódusokat:
fst: visszaadja az első komponenst.
snd: visszaadja a második komponenst.
swap: megcseréli a két komponenst.
first: paraméterül vár egy A -> C típusú függvényt, alkalmazza az első paraméterre, és visszaad egy új Pair<C,B>-t.
Készíts egy Maybe<A> típust. Ez egy doboz lesz, amely legfeljebb egy A objektumot tárol.
Legyen két leszármazottja:
Just<A>, mely eltárol egy A objektumot.
Nothing<A>, melyben nincs A objektum.
A Maybe<A> osztályba tegyük a következő metódusokat:
get: visszaadja az A objektumot. A Nothing<A>-ban ez kivételt dob (NoSuchElementException vagy hasonló).
fmap: paraméterül vár egy A -> B típusú függvényt. A Just<A> alkalmazza a függvényt, előállítva egy új Maybe<B> objektumot. A Nothing<A>-ban az fmap az identitás függvény lesz.
Definiáljuk a következő metódusokat egy osztályban:
lookup: egy Pair<A,B> párok (associációs) listájából megkeresi egy adott A objektumhoz rendelt B objektumot. Nem biztos, hogy az adott A szerepel a listában, ezért az eredmény Maybe<B> lesz.
insert: egy A elemet szúr be a helyére egy List<A> rendezett listába. Ehhez meg kell szorítani az A lehetséges értékeit Comparable segítségével.
sort: rendezzünk egy listát úgy, hogy az elemeket egyesével beszúrogatjuk egy üres listába az insert segítségével.
Hozzunk létre egy MultiMap osztályt! Egy MultiMap olyan, mint a Map, de egy kulcshoz több érték is társulhat.
Legyen paraméterezhető a kulcs és az érték típusával, pont mint a Map is!
Írjunk egy put metódust, mely egy kulcshoz tartozó értékekhez tesz egy újabbat!
Írjunk egy get metódust, mely egy kulcshoz tartozó értékek adja vissza! Vigyázzunk a szivárgással, ne adjunk hozzáférést a MultiMap belsejéhez!
Implementáljuk a contains metódust, melynek eredménye true, ha egy kulcs-érték pár megtalálható a MultiMap-ban!
Implementáljuk a removeAll metódust, mely egy kulcshoz tartozó minden értéket töröl!