Lambda kifejezések és Enum-ok
- Készítsünk egy
Elem
osztályt, ami egyszerű kulcs-érték párokat reprezentál. A kulcs-ok szöveges, az értékek tetszőlegesek (Object
). Legyen equals
, hashCode
és toString
függvénye és egy konstruktora, ami megkapja a kulcsot és az értéket is. equals, hashCode, toString példa
- Hozzunk létre
Creator
, Selector
és Transformer
interface-eket. A creator előállít valamilyen értéket (Object
), a selector eldönti róla, hogy megfelel-e egy adott feltételnek, a transformer pedig valamilyen módon egy új értéket hoz létre a megadott értékből. Ezek az osztályok legyenek FunctionalInterface-el megjelölve.
- Egy kis adatkezelő osztályt valósítsunk meg, ami
Elem
objektumok listáját tárolja. Legyenek insert
, transform
és query
metódusai. Az insert
kapjon egy objektumot, ami elő tud állítani egy értéket (Creator
interface), a query
egy olyan objektumot, ami szűrni tudja az elemeket (Selector
interface), a transform pedig egy Selector
-t és egy olyan objektumot, ami átalakítja az elemeket (Transformer
interface). Ezek a műveletek végezzék el a feladatuk. Lambda kifejezések tutorial
- Kétféle típusú működést várhatunk az adatkezelőtől, vagy azonnal elvégzi az
insert
és transform
műveleteket, vagy késlelteti őket, amíg a flush
metódust meg nem hívjuk. A késleltetés úgy történik, hogy egy listába eltároljuk az Action
típusú objektumként műveleteket.
- Hogy az adatkezelő éppen melyik módon működik, az egy attribútumától függjön, ami egy enum típus. Két értéket valósítsunk meg hozzá:
EAGER
és LAZY
(vagyis buzgó és lusta, a buzgó mindig rögtön végrehajtja a műveletet, a lusta csak akkor, ha flush
hívás történik). Enum tutorial
- Az enum biztosítson egy
perform
függvényt, ami a paraméterül kapott akciót vagy végrehajtja (EAGER
), vagy elrakja a szintén paraméterül kapott listába (LAZY
).
- Teszteljük, hogy az adatkezelőnk tényleg képes lustán és buzgón is működni.