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!