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()