在Java 8中,在Optional.empty中转换一个空String的Optional<String>

In Java 8, transform Optional<String> of an empty String in Optional.empty

给定一个字符串,我需要得到一个可选值,如果字符串为 null 或空,则结果将为 Optional.empty。 我可以这样做:

String ppo = "";
Optional<String> ostr = Optional.ofNullable(ppo);
if (ostr.isPresent() && ostr.get().isEmpty()) {
    ostr = Optional.empty();
}

但肯定有更优雅的方式。

怎么样:

Optional<String> ostr = ppo == null || ppo.isEmpty()
    ? Optional.empty()
    : Optional.of(ppo);

当然,如果你经常需要它,你可以把它放在一个实用方法中。我认为用空字符串创建 Optional 没有任何好处,然后才忽略它。

您可以使用过滤器:

Optional<String> ostr = Optional.ofNullable(ppo).filter(s -> !s.isEmpty());

如果 ppo 为 null 或为空,那将 return 一个空的 Optional。

您可以使用地图:

String ppo="";
Optional<String> ostr = Optional.ofNullable(ppo)
                                .map(s -> s.isEmpty()?null:s);
System.out.println(ostr.isPresent()); // prints false

使用 Apache Commons:

.filter(StringUtils::isNotEmpty)

如果你使用Guava,你可以这样做:

Optional<String> ostr = Optional.ofNullable(Strings.emptyToNull(ppo));

Java 11 个回答:

var optionalString = Optional.ofNullable(str).filter(Predicate.not(String::isBlank));

String::isBlank 处理范围更广的 'empty' 个字符。