当前位置: 代码迷 >> java >> 如果是可选项,我该怎么办? 不存在或存在但是空字符串?
  详细解决方案

如果是可选项,我该怎么办? 不存在或存在但是空字符串?

热度:58   发布时间:2023-07-31 11:33:47.0

我似乎无法找到一种更简洁的方法来做到这一点

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

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

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

觉得我错过了一些非常明显的东西。

也许这就是你要找的东西。

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

你会发现not Predicate

显然,这比使用if语句效率低,但它有它的位置。

啊,好的,你的评论后更清楚了。 使用orElseThrow

使用Java 11,您可以使用Predicate#notOptional#isEmptyString#isBlank更简洁:

Optional<String> foo = ...;

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

如果if语句体才会进入foo已经是空或Stringfoo包含为空String

如果字符串不存在,您可以使用来空字符串,然后对结果使用StringUtils.isBlank()

Optional<String> foo;

if (StringUtils.isBlank(foo.orElse(""))) {
    // ...
}
  相关解决方案