Ser*_*Cat 19 java guava java-8 java-stream
我在Stream里面有Google Guava:
this.map.entrySet().stream()
.filter(entity -> !Strings.isNullOrEmpty(entity.getValue()))
.map(obj -> String.format("%s=%s", obj.getKey(), obj.getValue()))
.collect(Collectors.joining(","))
Run Code Online (Sandbox Code Playgroud)
如您所见!String.isNullOrEmpty(entity),过滤器函数中有一个语句.
我不想再在项目中使用Guava了,所以我只想简单地将其替换为:
string == null || string.length() == 0;
Run Code Online (Sandbox Code Playgroud)
我怎么能更优雅呢?
lcz*_*ski 22
在 java 11 中有一个新方法Predicate::not。
所以你可以过滤掉空字符串:
list.stream()
.filter(Objects::nonNull)
.filter(Predicate.not(String::isEmpty))
Run Code Online (Sandbox Code Playgroud)
fge*_*fge 18
你可以编写自己的谓词:
final Predicate<Map.Entry<?, String>> valueNotNullOrEmpty
= e -> e.getValue() != null && !e.getValue().isEmpty();
Run Code Online (Sandbox Code Playgroud)
然后valueNotNullOrEmpty用作过滤器参数.
小智 15
如果你更喜欢使用commons-lang3,StringUtils有
isEmpty()isNotEmpty()isBlank()isNotBlank()这些方法可以在过滤器中用作方法参考:
this.stringList.stream().filter(StringUtils::isNotBlank);
Run Code Online (Sandbox Code Playgroud)
或作为lambdas:
this.stringList.stream().filter(s -> StringUtils.isNotBlank(s));
Run Code Online (Sandbox Code Playgroud)
您可以Strings使用自己的谓词创建自己的类:
public class Strings {
public static boolean isNotNullOrEmpty (String str) {
return str != null && !str.isEmpty();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你的代码中:
.filter(Strings::isNotNullOrEmpty)
Run Code Online (Sandbox Code Playgroud)
但正如@fge所提到的,你不能在Map.Entry<?,?>... 上使用它
| 归档时间: |
|
| 查看次数: |
43800 次 |
| 最近记录: |