Jin*_*won 27 java lambda predicate java-8
假设我有一串字符串.
final Stream<String> stream = ...;
Run Code Online (Sandbox Code Playgroud)
我想在修剪后过滤掉每个空字符串.
stream
.filter(Objects::nonNull)
.map(String::trim)
.filter(v -> !v.isEmpty());
Run Code Online (Sandbox Code Playgroud)
有没有办法应用Predicate#negate()替换v -> !v.isEmpty()部分?
.filter(((Predicate) String::isEmpty).negate()) // not compile
Run Code Online (Sandbox Code Playgroud)
Mis*_*sha 29
你必须这样做 .filter(((Predicate<String>) String::isEmpty).negate())
如果需要,您可以定义
static<T> Predicate<T> not(Predicate<T> p) {
return t -> !p.test(t);
}
Run Code Online (Sandbox Code Playgroud)
然后
.filter(not(String::isEmpty))
Run Code Online (Sandbox Code Playgroud)
但我会坚持下去 v -> !v.isEmpty()
看起来你必须Predicate<String>为此付出代价:
.filter(((Predicate<String>) (String::isEmpty)).negate())
Run Code Online (Sandbox Code Playgroud)
当然,在这种情况下使用lambda会短得多:
.filter(s -> ! s.isEmpty())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10967 次 |
| 最近记录: |