Java predikátum példa – predikátum szűrő
a matematikában a predikátum általában logikai értékű függvény 'P: X? {true, false}'
, az úgynevezett predikátum X. informálisan, erős. Olyan operátornak vagy függvénynek tekinthető, amely true
vagy false
értéket ad vissza.
Java 8 predikátumok használata
a Java 8-ban a predikátum funkcionális interfész, ezért használható lambda kifejezés vagy metódus referencia hozzárendelési célpontjaként. Szóval, hol gondolod, használhatjuk ezeket az igaz / hamis visszatérő funkciókat a napi programozásban? Azt fogom mondani, hogy predikátumokat használhat bárhol, ahol ki kell értékelnie a hasonló objektumok csoportjának/gyűjteményének állapotát, hogy az értékelés igaz vagy hamis eredményt eredményezzen.
például használhatja prdicates ezekben realtime usecases
- keresse meg az összes gyermek született egy adott dátum után
- pizzák rendelt egy adott időpontban
- alkalmazottak nagyobb, mint egy bizonyos életkor, és így tovább..
Java predikátum osztály
tehát a java predikátumok érdekesnek tűnnek. Menjünk mélyebbre.
mint mondtam, Predicate
funkcionális interfész. Ez azt jelenti, hogy átadhatjuk a lambda kifejezéseket, ahol a predikátum várható. Például az egyik ilyen módszer a filter()
módszer a Stream interfészről.
feltételezhetjük, hogy a stream olyan mechanizmus, amely a szekvenciális és párhuzamos aggregációs műveleteket támogató elemek sorozatát hozza létre. Ez azt jelenti, hogy bármikor összegyűjthetjük és végrehajthatjuk a folyamban lévő összes elem működését egy hívás során.
tehát lényegében használhatjuk stream és predikátum–
- először szűrjön ki bizonyos elemeket egy csoportból, majd
- , majd végezzen néhány műveletet a szűrt elemeken.
predikátum használata egy gyűjteményen
a bemutatáshoz van egy Employee
osztályunk az alábbiak szerint:
1. Minden munkavállaló, aki Férfi és idősebb, mint 21
public static Predicate<Employee> isAdultMale() { return p -> p.getAge() > 21 && p.getGender().equalsIgnoreCase("M");}
2. Minden olyan munkavállaló, aki nő, és több mint 18
public static Predicate<Employee> isAdultFemale() { return p -> p.getAge() > 18 && p.getGender().equalsIgnoreCase("F");}
3. Minden alkalmazott, akinek életkora több, mint egy adott életkor
public static Predicate<Employee> isAgeMoreThan(Integer age) { return p -> p.getAge() > age;}
lehet építeni többet közülük, mint egy, ha szükséges. Eddig minden rendben. Messze a fenti módszerek használatával a fenti 3 módszereket felvettem az EmployeePredicates-be.java:
látod, hogy létrehoztam egy másik segédprogramot filtermunkások() a java predikátum szűrő megjelenítéséhez. Ez alapvetően, hogy a kód tiszta és kevésbé ismétlődő. Azt is írni több predikátumok, hogy predikátum lánc, mint mi builder pattern.
tehát ebben a függvényben átadjuk a employees
listát, és átadunk egy predikátumot, akkor ez a függvény egy új employees
gyűjteményt ad vissza, amely megfelel a paraméter predikátumban említett feltételnek.
a predikátumok nagyon jó kiegészítői a Java 8-nak, és bármikor használni fogom.
záró gondolatok a Java Predikátumokról 8
- áthelyezik a feltételeket (néha az üzleti logikát) egy központi helyre. Ez segít az egység-tesztelés őket külön-külön.
- semmilyen változtatást nem kell több helyre másolni. A Java predikátum javítja a kód karbantartását.
- A kód pl. “filtermunkások(alkalmazottak, isAdultFemale ())” nagyon olvasható, mint egy if-else blokk írása.