Java – Prædikateksempel-Prædikatfilter
i matematik forstås et prædikat almindeligvis som en boolsk værdsat funktion 'P: X? {true, false}'
, kaldet prædikatet på uformelt, en stærk. Det kan betragtes som en operator eller funktion, der returnerer en værdi, der enten er true
eller false
.
Java 8 Predikater brug
i Java 8 er predikat en funktionel grænseflade og kan derfor bruges som tildelingsmål for et lambda-udtryk eller metodereference. Så hvor du tror, kan vi bruge disse sande / falske returfunktioner i den daglige programmering? Jeg vil sige, at du kan bruge prædikater hvor som helst, hvor du skal evaluere en betingelse for gruppe/samling af lignende objekter, således at evalueringen kan resultere enten i sand eller falsk.
for eksempel kan du bruge prdicates i disse realtidsbrugssager
- Find alle børn født efter en bestemt dato
- bestilte et bestemt tidspunkt
- medarbejdere større end en bestemt alder og så videre..
Java prædikat klasse
så java prædikater synes at være interessant ting. Lad os gå dybere.
som jeg sagde, Predicate
er funktionel grænseflade. Det betyder, at vi kan videregive lambda-udtryk, uanset hvor prædikat forventes. For eksempel er en sådan metode filter()
metode fra Stream interface.
vi kan antage en strøm som en mekanisme til at skabe en sekvens af elementer, der understøtter sekventielle og parallelle aggregatoperationer. Det betyder, at vi når som helst kan indsamle og udføre nogle operationer af alle elementer, der er til stede i strømmen i et opkald.
så i det væsentlige kan vi bruge strøm og prædikat til–
- filtrer først visse elementer fra en gruppe, og
- udfør derefter en handling på filtrerede elementer.
brug af prædikat på en samling
for at demonstrere har vi en Employee
klasse som nedenfor:
1. Alle medarbejdere, der er mænd og alder mere end 21
public static Predicate<Employee> isAdultMale() { return p -> p.getAge() > 21 && p.getGender().equalsIgnoreCase("M");}
2. Alle medarbejdere, der er kvinder og alder mere end 18
public static Predicate<Employee> isAdultFemale() { return p -> p.getAge() > 18 && p.getGender().equalsIgnoreCase("F");}
3. Alle medarbejdere, hvis alder er mere end en given alder
public static Predicate<Employee> isAgeMoreThan(Integer age) { return p -> p.getAge() > age;}
du kan bygge flere af dem som en når det er nødvendigt. Så langt så godt. Langt ved hjælp af ovenstående metoder har jeg medtaget ovenfor 3 metoder i EmployeePredicates.java :
du kan se, at jeg har oprettet en anden hjælpemetode filtermedarbejdere() for at vise java-prædikatfilter. Det er dybest set at gøre kode ren og mindre gentagne. Du kan også skrive mere end et prædikat for at lave prædikatkæde, som vi gør i builder pattern.
så i denne funktion passerer vi listen over employees
og vi sender et prædikat, så returnerer denne funktion en ny samling af employees
, der opfylder betingelsen nævnt i parameterprædikat.
prædikater er virkelig meget god tilføjelse i Java 8, og jeg vil bruge det, når jeg får chancen.
Endelige tanker om prædikater i Java 8
- de flytter dine forhold (undertiden forretningslogik) til et centralt sted. Dette hjælper med at teste dem separat.
- enhver ændring behøver ikke duplikeres på flere steder. Java prædikat forbedrer kode vedligeholdelse.
- koden f.eks. “filtermedarbejdere(medarbejdere, isadultfemale())” er meget læsbar end at skrive en If-else-blok.