Lambda kifejezések és Enum-ok

  1. 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
  2. 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.
  3. 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
  4. 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.
  5. 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
  6. 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).
  7. Teszteljük, hogy az adatkezelőnk tényleg képes lustán és buzgón is működni.