Wie kann ich negieren eine lambda-Prädikat?
Können sagen, ich habe einen Stream von Strings.
final Stream<String> stream = ...;
Will ich herausfiltern, jedes leere Zeichenfolge nach getrimmt.
stream
.filter(Objects::nonNull)
.map(String::trim)
.filter(v -> !v.isEmpty());
Gibt es eine Möglichkeit, sich zu bewerben Prädikat#Negation() für den Ersatz v -> !v.isEmpty()
Teil?
.filter(((Predicate) String::isEmpty).negate()) //not compile
Du musst angemeldet sein, um einen Kommentar abzugeben.
Würden Sie zu tun haben
.filter(((Predicate<String>) String::isEmpty).negate())
Wenn Sie möchten, können Sie festlegen,
dann
aber ich würde nur stick mit
v -> !v.isEmpty()
return p.negate();
Es scheint, wie Sie haben zu werfen, um
Predicate<String>
für diese Arbeit:Natürlich, es wäre viel kürzer Verwendung eines lambda-in diesem Fall:
Anstatt Klassen selbst verwenden durian utility library. Es hat eine Menge von Methoden:
and
,or
undnot
natürlich: