在Java 8中,在Optional.empty中转换一个空String的Optional<String>
In Java 8, transform Optional<String> of an empty String in Optional.empty
给定一个字符串,我需要得到一个可选值,如果字符串为 null 或空,则结果将为 Optional.empty。
我可以这样做:
String ppo = "";
Optional<String> ostr = Optional.ofNullable(ppo);
if (ostr.isPresent() && ostr.get().isEmpty()) {
ostr = Optional.empty();
}
但肯定有更优雅的方式。
怎么样:
Optional<String> ostr = ppo == null || ppo.isEmpty()
? Optional.empty()
: Optional.of(ppo);
当然,如果你经常需要它,你可以把它放在一个实用方法中。我认为用空字符串创建 Optional
没有任何好处,然后才忽略它。
您可以使用过滤器:
Optional<String> ostr = Optional.ofNullable(ppo).filter(s -> !s.isEmpty());
如果 ppo
为 null 或为空,那将 return 一个空的 Optional。
您可以使用地图:
String ppo="";
Optional<String> ostr = Optional.ofNullable(ppo)
.map(s -> s.isEmpty()?null:s);
System.out.println(ostr.isPresent()); // prints false
使用 Apache Commons:
.filter(StringUtils::isNotEmpty)
如果你使用Guava,你可以这样做:
Optional<String> ostr = Optional.ofNullable(Strings.emptyToNull(ppo));
Java 11 个回答:
var optionalString = Optional.ofNullable(str).filter(Predicate.not(String::isBlank));
String::isBlank
处理范围更广的 'empty' 个字符。
给定一个字符串,我需要得到一个可选值,如果字符串为 null 或空,则结果将为 Optional.empty。 我可以这样做:
String ppo = "";
Optional<String> ostr = Optional.ofNullable(ppo);
if (ostr.isPresent() && ostr.get().isEmpty()) {
ostr = Optional.empty();
}
但肯定有更优雅的方式。
怎么样:
Optional<String> ostr = ppo == null || ppo.isEmpty()
? Optional.empty()
: Optional.of(ppo);
当然,如果你经常需要它,你可以把它放在一个实用方法中。我认为用空字符串创建 Optional
没有任何好处,然后才忽略它。
您可以使用过滤器:
Optional<String> ostr = Optional.ofNullable(ppo).filter(s -> !s.isEmpty());
如果 ppo
为 null 或为空,那将 return 一个空的 Optional。
您可以使用地图:
String ppo="";
Optional<String> ostr = Optional.ofNullable(ppo)
.map(s -> s.isEmpty()?null:s);
System.out.println(ostr.isPresent()); // prints false
使用 Apache Commons:
.filter(StringUtils::isNotEmpty)
如果你使用Guava,你可以这样做:
Optional<String> ostr = Optional.ofNullable(Strings.emptyToNull(ppo));
Java 11 个回答:
var optionalString = Optional.ofNullable(str).filter(Predicate.not(String::isBlank));
String::isBlank
处理范围更广的 'empty' 个字符。