Java Predicate Example-Predicate Filter

in de wiskunde wordt een predicaat algemeen gezien als een Booleaanse-gewaardeerde functie 'P: X? {true, false}', het predicaat op X. informeel, een sterk. Het kan gezien worden als een operator of functie die een waarde retourneert die ofwel true of falseis.

Java 8 predicaten gebruik

in Java 8 is predicaat een functionele interface en kan daarom worden gebruikt als doel voor toewijzing voor een lambda-expressie of methodereferentie. Dus, waar denk je dat we deze true/false terugkerende functies kunnen gebruiken in het dagelijks programmeren? Ik zal zeggen dat je predicaten overal kunt gebruiken waar je een voorwaarde moet evalueren op groep/verzameling van soortgelijke objecten, zodat evaluatie kan resulteren in waar of onwaar.

bijvoorbeeld, u kunt prdicates gebruiken in deze realtime gebruikskases

  1. Zoek alle kinderen geboren na een bepaalde datum
  2. pizza ‘ s besteld een bepaalde tijd
  3. werknemers ouder dan een bepaalde leeftijd enzovoort..

Java predicaat Class

dus java predicaten lijkt interessant. Laten we dieper gaan.

zoals gezegd is Predicate een functionele interface. Het betekent dat we lambda uitdrukkingen kunnen doorgeven waar predicaat wordt verwacht. Een van deze methoden is bijvoorbeeld filter() method from Stream interface.

we kunnen een stroom aannemen als een mechanisme om een reeks elementen te creëren die sequentiële en parallelle geaggregeerde operaties ondersteunen. Het betekent dat we op elk moment kunnen verzamelen en uitvoeren van een bepaalde operatie van alle elementen die aanwezig zijn in de stroom in een oproep.

dus, in wezen kunnen we stream en predicaat gebruiken om–

  • filter eerst bepaalde elementen uit een groep, en
  • voer dan een bewerking uit op gefilterde elementen.

met behulp van predicaat op een verzameling

om aan te tonen, hebben we een Employee klasse zoals hieronder:

1. Alle werknemers die mannelijk zijn en ouder dan 21

public static Predicate<Employee> isAdultMale() { return p -> p.getAge() > 21 && p.getGender().equalsIgnoreCase("M");}

2. Alle werknemers die vrouw zijn en ouder dan 18

public static Predicate<Employee> isAdultFemale() { return p -> p.getAge() > 18 && p.getGender().equalsIgnoreCase("F");}

3. Alle werknemers met een leeftijd van meer dan een bepaalde leeftijd

public static Predicate<Employee> isAgeMoreThan(Integer age) { return p -> p.getAge() > age;}

u kunt meer van hen bouwen als dat nodig is. Tot nu toe gaat het goed. Ver met behulp van bovenstaande methoden heb ik opgenomen boven 3 methoden in EmployeePredicates.java:

zie je Ik heb een andere utility method filterEmployees() gemaakt om java predicaat filter te tonen. Het is eigenlijk om code schoon en minder repetitief te maken. U kunt ook meer dan één predicaat schrijven om predicaatketting te maken, zoals we doen in builder pattern.

dus, in deze functie passeren we de lijst van employees en we passeren een predicaat, dan zal deze functie een nieuwe verzameling van employees retourneren die voldoet aan de voorwaarde vermeld in parameter predicaat.

predicaten zijn echt heel goede toevoeging in Java 8 en ik ga het gebruiken wanneer ik de kans krijg.

laatste gedachten over predicaten in Java 8

  1. ze verplaatsen uw voorwaarden (soms business logic) naar een centrale plaats. Dit helpt bij unit-testen ze afzonderlijk.
  2. elke wijziging hoeft niet op meerdere plaatsen te worden herhaald. Java predicate verbetert code onderhoud.
  3. de code bijvoorbeeld ” filterEmployees (employees, isAdultFemale ())” is zeer leesbaar dan het schrijven van een if-else blok.