在Java 8中,转换Optional.empty </string>中空字符串的Optional <string>

时间:2015-02-04 13:19:43

标签: java java-8 optional

给定一个String我需要获得一个Optional,如果String为null或为空,则结果为Optional.empty。 我可以这样做:

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

但肯定必须有更优雅的方式。

6 个答案:

答案 0 :(得分:72)

您可以使用过滤器:

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

如果ppo为空或为空,那将返回空的可选项。

答案 1 :(得分:13)

使用Apache Commons:

.filter(StringUtils::isNotEmpty)

答案 2 :(得分:5)

Java 11答案:

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

String::isBlank处理更广泛的“空”字符。

答案 3 :(得分:4)

怎么样:

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

当然,如果您经常需要它,可以将它放在实用程序方法中。我认为使用空字符串创建Optional没有任何好处,只能忽略它。

答案 4 :(得分:2)

您可以使用地图:

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

答案 5 :(得分:1)

如果你使用番石榴,你可以这样做:

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