Java Predicate Example – Predicate Filter

In der Mathematik wird ein Prädikat allgemein als eine boolesch bewertete Funktion 'P: X? {true, false}' verstanden, die als Prädikat auf X bezeichnet wird. Es kann als Operator oder Funktion betrachtet werden, die einen Wert zurückgibt, der entweder true oder false ist.

Verwendung von Java 8-Prädikaten

In Java 8 ist Predicate eine funktionale Schnittstelle und kann daher als Zuweisungsziel für einen Lambda-Ausdruck oder eine Methodenreferenz verwendet werden. Also, wo denken Sie, können wir diese Wahr / Falsch-Rückgabefunktionen in der täglichen Programmierung verwenden? Ich werde sagen, dass Sie Prädikate überall dort verwenden können, wo Sie eine Bedingung für eine Gruppe / Sammlung ähnlicher Objekte auswerten müssen, sodass die Auswertung entweder zu wahr oder falsch führen kann.

Zum Beispiel können Sie prdicates in diesen Echtzeit-Anwendungsfällen verwenden

  1. Finden Sie alle Kinder, die nach einem bestimmten Datum geboren wurden
  2. Pizzen, die zu einer bestimmten Zeit bestellt wurden
  3. Mitarbeiter, die älter als ein bestimmtes Alter sind und so weiter..

Java-Prädikatklasse

Java-Prädikate scheinen also eine interessante Sache zu sein. Lass uns tiefer gehen.

Wie gesagt, Predicate ist eine funktionale Schnittstelle. Dies bedeutet, dass wir Lambda-Ausdrücke überall dort übergeben können, wo ein Prädikat erwartet wird. Eine solche Methode ist beispielsweise die filter() -Methode von der Stream-Schnittstelle.

Wir können einen Stream als Mechanismus zum Erstellen einer Sequenz von Elementen annehmen, die sequentielle und parallele Aggregatoperationen unterstützen. Dies bedeutet, dass wir jederzeit alle im Stream vorhandenen Elemente in einem Aufruf sammeln und ausführen können.

Im Wesentlichen können wir also Stream und Prädikat verwenden, um –

  • filtern Sie zuerst bestimmte Elemente aus einer Gruppe und
  • Führen Sie dann eine Operation für gefilterte Elemente aus.

Mit Prädikat auf einer Sammlung

Um zu demonstrieren, haben wir eine Employee Klasse wie folgt:

1. Alle Mitarbeiter, die männlich sind und älter als 21

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

2. Alle Mitarbeiter, die weiblich sind und älter als 18

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

3. Alle Mitarbeiter, deren Alter ist mehr als ein bestimmtes Alter

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

Sie können mehr von ihnen als bauen, wenn nötig. So weit so gut. Bei Verwendung der oben genannten Methoden habe ich die oben genannten 3 Methoden in EmployeePredicates aufgenommen.java :

Sie sehen, ich habe eine andere Dienstprogrammmethode filterEmployees() erstellt, um den Java-Prädikatsfilter anzuzeigen. Es ist im Grunde, um Code sauber und weniger repetitiv zu machen. Sie können auch mehr als ein Prädikat schreiben, um eine Prädikatskette zu erstellen, wie wir es im Builder-Muster tun.

Also, in dieser Funktion übergeben wir die Liste von employees und wir übergeben ein Prädikat, dann gibt diese Funktion eine neue Sammlung von employees zurück, die die im Parameterprädikat erwähnte Bedingung erfüllt.

Prädikate sind wirklich sehr gute Ergänzung in Java 8 und ich werde es verwenden, wann immer ich Gelegenheit bekomme.

Abschließende Gedanken zu Prädikaten in Java 8

  1. Sie verschieben Ihre Bedingungen (manchmal Geschäftslogik) an einen zentralen Ort. Dies hilft beim separaten Testen von Einheiten.
  2. Jede Änderung muss nicht an mehreren Stellen dupliziert werden. Java Predicate verbessert die Codepflege.
  3. Der Code zB „filterEmployees(employees, isAdultFemale())“ ist sehr gut lesbar als das Schreiben eines if-else-Blocks.