文字列のストリームがあるとしましょう。
_final Stream<String> stream = ...;
_
トリミングした後、各空の文字列を除外します。
_stream
.filter(Objects::nonNull)
.map(String::trim)
.filter(v -> !v.isEmpty());
_
v -> !v.isEmpty()
の部分を置き換えるために Predicate#negate() を適用する方法はありますか?
_.filter(((Predicate) String::isEmpty).negate()) // not compile
_
.filter(((Predicate<String>) String::isEmpty).negate())
を実行する必要があります
必要に応じて、次を定義できます
_static<T> Predicate<T> not(Predicate<T> p) {
return t -> !p.test(t);
}
_
その後
_.filter(not(String::isEmpty))
_
しかし、私はv -> !v.isEmpty()
に固執します
これを機能させるには、Predicate<String>
にキャストする必要があるようです:
.filter(((Predicate<String>) (String::isEmpty)).negate())
もちろん、この場合はラムダを使用する方がはるかに短くなります。
.filter(s -> ! s.isEmpty())