我似乎找不到一种更简洁的方法
Optional<String> foo;
if (!foo.isPresent() || StringUtils.isBlank(foo.get())) {
// ...
}
有,但这实际上使逻辑更加复杂,IMO:
Optional<String> foo;
if (!foo.filter(StringUtils::isNotBlank).isPresent()) {
// ...
}
感觉就像我遗漏了一些明显的东西。
答案 0 :(得分:6)
也许这就是您想要的。
Optional.of("")
.filter(not(String::isBlank)))
.orElseThrow(() -> new MyException("..."));
您将在not
下找到Predicate
。
这显然不如使用if
语句有效,但是它有它的位置。
嗯,好的,在您发表评论后,它更加清晰了。使用orElseThrow
。
答案 1 :(得分:3)
在Java 11中,您可以使用Predicate#not
,Optional#isEmpty
和String#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(""))) {
// ...
}