Les predicates sont des interfaces fonctionnelles ayant un seul argument en entrée et retournent un boolean. Ils sont principalement utilisés lors des filtrages. Sa définition est la suivante :
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
default Predicate<T> and(Predicate<? super T> other);
default Predicate<T> negate();
default Predicate<T> or(Predicate<? super T> other);
static <T> Predicate<T> isEqual(Object targetRef);
static <T> Predicate<T> not(Predicate<? super T> target);
}
Remarques :
Les filtres des Stream acceptent des predicates :
final List<String> list = Arrays.asList("Alex", "Claire", "Angel");
final List<String> result = list.stream().filter(x -> x.startsWith("A")).collect(Collectors.toList());
System.out.println(result); // [Alex, Angel]
Ou encore, avec une déclaration plus explicite du predicate :
final Predicate<String> predicate = x -> x.startsWith("A");
final List<String> list = Arrays.asList("Alex", "Claire", "Angel");
final List<String> result = list.stream().filter(predicate).collect(Collectors.toList());
System.out.println(result); // [Alex, Angel]
final Predicate<String> predicate = x -> x.startsWith("A");
final Predicate<String> predicate2 = x -> x.endsWith("x");
final List<String> list = Arrays.asList("Alex", "Claire", "Angel", "Sorin");
final List<String> result = list.stream().filter(predicate.and(predicate2)).collect(Collectors.toList());
System.out.println(result); // [Alex]
Est équivalent au niveau du résultat au code suivant :
final List<String> list = Arrays.asList("Alex", "Claire", "Angel", "Sorin");
final List<String> result = list.stream().filter(x -> x.startsWith("A") && x.endsWith("x")).collect(Collectors.toList());
System.out.println(result); // [Alex]
final Predicate<String> predicate = x -> x.startsWith("A");
final Predicate<String> predicate2 = x -> x.endsWith("n");
final List<String> list = Arrays.asList("Alex", "Claire", "Angel", "Sorin");
final List<String> result = list.stream().filter(predicate.or(predicate2)).collect(Collectors.toList());
System.out.println(result); // [Alex, Angel, Sorin]
final Predicate<String> predicate = x -> x.startsWith("A");
final List<String> list = Arrays.asList("Alex", "Claire", "Angel", "Sorin");
final List<String> result = list.stream().filter(predicate.negate()).collect(Collectors.toList());
System.out.println(result); // [Claire, Sorin]
Remarque : Il est possible de fournir un objet personalisé et le récupérer après le filtrage.
LauLem.com - Conditions Générales d'Utilisation - Informations Légales - Charte relative aux cookies - Charte sur la protection des données personnelles - A propos