给定一个String我需要获得一个Optional,如果String为null或为空,则结果为Optional.empty。 我可以这样做:
String ppo = "";
Optional<String> ostr = Optional.ofNullable(ppo);
if (ostr.isPresent() && ostr.get().isEmpty()) {
ostr = Optional.empty();
}
但肯定必须有更优雅的方式。
答案 0 :(得分:72)
您可以使用过滤器:
Optional<String> ostr = Optional.ofNullable(ppo).filter(s -> !s.isEmpty());
如果ppo
为空或为空,那将返回空的可选项。
答案 1 :(得分:13)
使用Apache Commons:
.filter(StringUtils::isNotEmpty)
答案 2 :(得分:5)
Java 11答案:
var optionalString = Optional.ofNullable(str).filter(Predicate.not(String::isBlank));
String::isBlank
处理更广泛的“空”字符。
答案 3 :(得分:4)
怎么样:
Optional<String> ostr = ppo == null || ppo.isEmpty()
? Optional.empty()
: Optional.of(ppo);
当然,如果您经常需要它,可以将它放在实用程序方法中。我认为使用空字符串创建Optional
没有任何好处,只能忽略它。
答案 4 :(得分:2)
您可以使用地图:
String ppo="";
Optional<String> ostr = Optional.ofNullable(ppo)
.map(s -> s.isEmpty()?null:s);
System.out.println(ostr.isPresent()); // prints false
答案 5 :(得分:1)
如果你使用番石榴,你可以这样做:
Optional<String> ostr = Optional.ofNullable(Strings.emptyToNull(ppo));