如果Optional <string>不存在或存在但为空字符串,我该怎么办?

时间:2019-02-13 21:31:47

标签: java optional

我似乎找不到一种更简洁的方法

Optional<String> foo;
if (!foo.isPresent() || StringUtils.isBlank(foo.get())) {
  // ...
}

有,但这实际上使逻辑更加复杂,IMO:

Optional<String> foo;
if (!foo.filter(StringUtils::isNotBlank).isPresent()) {
  // ...
}

感觉就像我遗漏了一些明显的东西。

3 个答案:

答案 0 :(得分:6)

也许这就是您想要的。

Optional.of("")
        .filter(not(String::isBlank)))
        .orElseThrow(() -> new MyException("..."));

您将在not下找到Predicate

这显然不如使用if语句有效,但是它有它的位置。

嗯,好的,在您发表评论后,它更加清晰了。使用orElseThrow

答案 1 :(得分:3)

在Java 11中,您可以使用Predicate#notOptional#isEmptyString#isBlank来使其更加简洁:

Optional<String> foo = ...;

if (foo.filter(not(String::isBlank)).isEmpty()) {
    // ...
}

仅在foo已为空或String包含的foo为空String时输入if语句正文。

答案 2 :(得分:1)

如果字符串不存在,则可以使用Optional#orElse()来替换空字符串,然后在结果中使用StringUtils.isBlank()

Optional<String> foo;

if (StringUtils.isBlank(foo.orElse(""))) {
    // ...
}