Java 8 流字符串空或空过滤器

2022-09-01 08:04:07

我在Stream中有谷歌番石榴:

this.map.entrySet().stream()
.filter(entity -> !Strings.isNullOrEmpty(entity.getValue()))
.map(obj -> String.format("%s=%s", obj.getKey(), obj.getValue()))
.collect(Collectors.joining(","))

如您所见,筛选器函数内部有一个语句。!String.isNullOrEmpty(entity)

我不想在项目中再使用番石榴,所以我只想简单地用:

string == null || string.length() == 0;

我怎样才能做得更优雅?


答案 1

你可以编写自己的谓词:

final Predicate<Map.Entry<?, String>> valueNotNullOrEmpty
    = e -> e.getValue() != null && !e.getValue().isEmpty();

然后直接用作筛选器参数。valueNotNullOrEmpty


答案 2

在java 11中,有一个新方法Predicate::not

所以你可以过滤掉空字符串:

list.stream()
  .filter(Objects::nonNull)
  .filter(Predicate.not(String::isEmpty))

推荐