suma para instrucciones expresiones ejercicios calculo java lambda java-8 predicate

para - lambda stream java



¿Cómo puedo negar un Predicado lambda? (3)

En lugar de crear clases por ti mismo, usa la utilidad de la biblioteca durian . Tiene muchos methods : and , or not por supuesto:

import static com.diffplug.common.base.Predicates.not; stream .filter(Objects::nonNull) .map(String::trim) .filter(not(String::isEmpty));

Digamos que tengo un flujo de cuerdas.

final Stream<String> stream = ...;

Quiero filtrar cada cadena vacía después de recortar.

stream .filter(Objects::nonNull) .map(String::trim) .filter(v -> !v.isEmpty());

¿Hay alguna forma de aplicar Predicate#negate() para reemplazar la parte v -> !v.isEmpty() ?

.filter(((Predicate) String::isEmpty).negate()) // not compile


Parece que tienes que lanzar a Predicate<String> para que esto funcione:

.filter(((Predicate<String>) (String::isEmpty)).negate())

Por supuesto, sería mucho más corto usar un lambda en este caso:

.filter(s -> ! s.isEmpty())


Tendría que hacer .filter(((Predicate<String>) String::isEmpty).negate())

Si lo deseas, puedes definir

static<T> Predicate<T> not(Predicate<T> p) { return t -> !p.test(t); }

y entonces

.filter(not(String::isEmpty))

pero me quedaría con v -> !v.isEmpty()