Exemple de Prédicat Java – Filtre de prédicat
En mathématiques, un prédicat est généralement compris comme une fonction à valeur booléenne 'P: X? {true, false}'
, appelée prédicat sur X. Officieusement, un fort. Il peut être considéré comme un opérateur ou une fonction qui renvoie une valeur true
ou false
.
Utilisation des prédicats Java 8
Dans Java 8, le prédicat est une interface fonctionnelle et peut donc être utilisé comme cible d’affectation pour une expression lambda ou une référence de méthode. Donc, où pensez-vous, nous pouvons utiliser ces fonctions de retour vrai / faux dans la programmation quotidienne? Je dirai que vous pouvez utiliser des prédicats partout où vous devez évaluer une condition sur un groupe / une collection d’objets similaires de sorte que l’évaluation puisse aboutir à true ou false.
Par exemple, vous pouvez utiliser des prdicates dans ces cas d’utilisation en temps réel
- Trouvez tous les enfants nés après une date particulière
- Pizzas commandées à une heure spécifique
- Employés supérieurs à un certain âge et ainsi de suite..
Classe de prédicats Java
Donc les prédicats java semblent être une chose intéressante. Allons plus loin.
Comme je l’ai dit, Predicate
est une interface fonctionnelle. Cela signifie que nous pouvons passer des expressions lambda partout où le prédicat est attendu. Par exemple, une telle méthode est la méthode filter()
de l’interface de flux.
Nous pouvons supposer qu’un flux est un mécanisme permettant de créer une séquence d’éléments prenant en charge des opérations d’agrégat séquentielles et parallèles. Cela signifie que nous pouvons à tout moment collecter et effectuer une opération de tous les éléments présents dans le flux en un seul appel.
Donc, essentiellement, nous pouvons utiliser stream et predicate pour –
- filtrez d’abord certains éléments d’un groupe, puis
- effectuez une opération sur les éléments filtrés.
En utilisant le prédicat sur une collection
Pour démontrer, nous avons une classe Employee
comme ci-dessous:
1. Tous les employés de sexe masculin et âgés de plus de 21
public static Predicate<Employee> isAdultMale() { return p -> p.getAge() > 21 && p.getGender().equalsIgnoreCase("M");}
2. Tous les employés de sexe féminin et âgés de plus de 18
public static Predicate<Employee> isAdultFemale() { return p -> p.getAge() > 18 && p.getGender().equalsIgnoreCase("F");}
3. Tous les employés dont l’âge est supérieur à un âge donné
public static Predicate<Employee> isAgeMoreThan(Integer age) { return p -> p.getAge() > age;}
Vous pouvez en construire plus en cas de besoin. Jusqu’à présent, tout va bien. Loin d’utiliser les méthodes ci-dessus, j’ai inclus les méthodes 3 ci-dessus dans EmployeePredicates.java:
Vous voyez que j’ai créé une autre méthode utilitaire filterEmployees() pour afficher le filtre de prédicat java. C’est essentiellement pour rendre le code propre et moins répétitif. Vous pouvez également écrire plusieurs prédicats pour créer une chaîne de prédicats, comme nous le faisons dans le modèle de générateur.
Donc, dans cette fonction, nous passons la liste de employees
et nous passons un prédicat, alors cette fonction retournera une nouvelle collection de employees
satisfaisant la condition mentionnée dans le prédicat de paramètre.
Les prédicats sont vraiment un très bon ajout en Java 8 et je vais l’utiliser chaque fois que j’en aurai l’occasion.
Réflexions finales sur les prédicats en Java 8
- Ils déplacent vos conditions (parfois la logique métier) vers un endroit central. Cela aide à les tester séparément.
- Toute modification n’a pas besoin d’être dupliquée à plusieurs endroits. Le prédicat Java améliore la maintenance du code.
- Le code par exemple « filterEmployees(employees, isAdultFemale()) » est très lisible que d’écrire un bloc if-else.