问题描述
我似乎无法找到一种更简洁的方法来做到这一点
Optional<String> foo;
if (!foo.isPresent() || StringUtils.isBlank(foo.get())) {
// ...
}
有这个,但它实际上使逻辑更复杂,IMO:
Optional<String> foo;
if (!foo.filter(StringUtils::isNotBlank).isPresent()) {
// ...
}
觉得我错过了一些非常明显的东西。
1楼
也许这就是你要找的东西。
Optional.of("")
.filter(not(String::isBlank)))
.orElseThrow(() -> new MyException("..."));
你会发现not
Predicate
。
显然,这比使用if
语句效率低,但它有它的位置。
啊,好的,你的评论后更清楚了。
使用orElseThrow
。
2楼
使用Java 11,您可以使用Predicate#not
, Optional#isEmpty
和String#isBlank
更简洁:
Optional<String> foo = ...;
if (foo.filter(not(String::isBlank)).isEmpty()) {
// ...
}
如果if语句体才会进入foo
已经是空或String
即foo
包含为空String
。
3楼
如果字符串不存在,您可以使用来空字符串,然后对结果使用StringUtils.isBlank()
:
Optional<String> foo;
if (StringUtils.isBlank(foo.orElse(""))) {
// ...
}