我似乎无法找到一种更简洁的方法来做到这一点
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#not
,Optional#isEmpty
和String#isBlank
更简洁:
Optional<String> foo = ...;
if (foo.filter(not(String::isBlank)).isEmpty()) {
// ...
}
只有当foo
已经为空或String
包含的foo
为空String
时,才会输入if语句体。
如果字符串不存在,您可以使用Optional#orElse()
来填充空字符串,然后在结果上使用StringUtils.isBlank()
:
Optional<String> foo;
if (StringUtils.isBlank(foo.orElse(""))) {
// ...
}