Disons que j'ai un flux de cordes.
final Stream<String> stream = ...;
Je veux filtrer chaque chaîne vide après avoir coupé.
stream
.filter(Objects::nonNull)
.map(String::trim)
.filter(v -> !v.isEmpty());
Existe-t-il un moyen d'appliquer Predicate # negate () pour remplacer la partie v -> !v.isEmpty()
?
.filter(((Predicate) String::isEmpty).negate()) // not compile
Vous devez faire .filter(((Predicate<String>) String::isEmpty).negate())
Si vous le souhaitez, vous pouvez définir
static<T> Predicate<T> not(Predicate<T> p) {
return t -> !p.test(t);
}
puis
.filter(not(String::isEmpty))
mais je resterais avec v -> !v.isEmpty()
Il semble que vous devez lancer un casting sur Predicate<String>
pour que cela fonctionne:
.filter(((Predicate<String>) (String::isEmpty)).negate())
Bien sûr, il serait beaucoup plus court d'utiliser un lambda dans ce cas:
.filter(s -> ! s.isEmpty())