Java Predicate
Exemple de prédicat avec filter
@Test
void devrait_contenir_fruits_commencant_par_P() {
List < String > fruits = Arrays.asList("Pomme", "Banane", "Poire", "Citron", "PĂȘche", "Mangue");
Predicate < String > commenceParP = fruit - > fruit.startsWith("P");
/* filtrer la liste. Obtient tous les noms de fruits commençant par P */
List < String > resultats = fruits.stream()
.filter(commenceParP)
.collect(Collectors.toList());
//devrait avoir une taille de 3
assertEquals(3, resultats.size());
//devrait contenir Pomme, Poire et PĂȘche
assertTrue(resultats.containsAll(Arrays.asList("Pomme", "Poire", "PĂȘche")));
}
Exemple avec une fonction prédicat
@Test
void devrait_contenir_fruits_commencant_par_P_avec_commencantPar() {
List < String > fruits = Arrays.asList("Pomme", "Banane", "Poire", "Citron", "PĂȘche", "Mangue");
/* filtrer la liste. Obtient tous les noms de fruits commençant par P */
List < String > resultats = fruits.stream()
.filter(commencantPar("P"))
.collect(Collectors.toList());
//devrait avoir une taille de 3
assertEquals(3, resultats.size());
//devrait contenir Pomme, Poire et PĂȘche
assertTrue(resultats.containsAll(Arrays.asList("Pomme", "Poire", "PĂȘche")));
}
public Predicate < String > commencantPar(String lettres) {
return str - > str.startsWith(lettres);
}
Example avec la méthode or()
@Test
void devrait_contenir_fruits_commencant_par_P_ou_par_B() {
List < String > fruits = Arrays.asList("Pomme", "Banane", "Poire", "Citron", "PĂȘche", "Mangue");
/* filtrer la liste. Obtient tous les noms de fruits commençant par P ou par B */
List < String > resultats = fruits.stream()
.filter(commencantPar("P").or(commencantPar("B")))
.collect(Collectors.toList());
//devrait avoir une taille de 4
assertEquals(4, resultats.size());
//devrait contenir Pomme, Poire, PĂȘche et Banane
assertTrue(resultats.containsAll(Arrays.asList("Pomme", "Poire", "PĂȘche", "Banane")));
}
On peut aussi cumuler avec d'autres fonctions.
@Test
void devrait_contenir_fruits_commencant_par_P_ou_finissant_par_n() {
List < String > fruits = Arrays.asList("Pomme", "Banane", "Poire", "Citron", "PĂȘche", "Mangue");
/* filtrer la liste. Obtient tous les noms de fruits commençant par P ou finissant par n */
List < String > resultats = fruits.stream()
.filter(commencantPar("P").or(finissantPar("n")))
.collect(Collectors.toList());
//devrait avoir une taille de 4
assertEquals(4, resultats.size());
//devrait contenir Pomme, Poire, PĂȘche et Citron
assertTrue(resultats.containsAll(Arrays.asList("Pomme", "Poire", "PĂȘche", "Citron")));
}
public Predicate < String > finissantPar(String lettres) {
return str - > str.endsWith(lettres);
}
Exemple avec la méthode and()
@Test
void devrait_contenir_fruits_commencant_par_Po_et_finissant_par_re() {
List < String > fruits = Arrays.asList("Pomme", "Banane", "Poire", "Citron", "PĂȘche", "Mangue");
/* filtrer la liste. Obtient tous les noms de fruits commençant par Po et finissant par re */
List < String > resultats = fruits.stream()
.filter(commencantPar("Po").and(finissantPar("re")))
.collect(Collectors.toList());
//devrait avoir une taille de 1
assertEquals(1, resultats.size());
//devrait contenir Poire
assertTrue(resultats.containsAll(Arrays.asList("Poire")));
}
Exemple de programmation impérative
On peut aussi utiliser l'interface fonctionnelle Predicate de maniÚre impérative.
@Test
void devrait_contenir_fruits_commencant_par_P_iteratif() {
List < String > fruits = Arrays.asList("Pomme", "Banane", "Poire", "Citron", "PĂȘche", "Mangue");
/* filtrer la liste. Obtient tous les noms de fruits commençant par Po et finissant par re */
List < String > resultats = new ArrayList < String > ();
for (String fruit: fruits) {
/* Si le prédicat renvoie true */
if (commencantPar("Po").and(finissantPar("re")).test(fruit)) {
resultats.add(fruit);
}
}
//devrait avoir une taille de 1
assertEquals(1, resultats.size());
//devrait contenir Poire
assertTrue(resultats.containsAll(Arrays.asList("Poire")));
}
Commentaires
Enregistrer un commentaire