在Java 8中,转换Optional.empty中空String的Optional

给定一个String我需要获得一个Optional,如果String为null或为空,则结果为Optional.empty。 我可以这样做:

String ppo = ""; Optional ostr = Optional.ofNullable(ppo); if (ostr.isPresent() && ostr.get().isEmpty()) { ostr = Optional.empty(); } 

但肯定必须有更优雅的方式。

您可以使用filter:

 Optional ostr = Optional.ofNullable(ppo).filter(s -> !s.isEmpty()); 

如果ppo为null或为空,那将返回一个空的Optional。

使用Apache Commons:

 .filter(StringUtils::isNotEmpty) 

怎么样:

 Optional ostr = ppo == null || ppo.isEmpty() ? Optional.empty() : Optional.of(ppo); 

当然,如果你经常需要它,你可以把它放在一个实用工具方法中。 我认为使用空字符串创建Optional没有任何好处,只能忽略它。

你可以使用map:

 String ppo=""; Optional ostr = Optional.ofNullable(ppo) .map(s -> s.isEmpty()?null:s); System.out.println(ostr.isPresent()); // prints false 

如果你使用番石榴,你可以这样做:

 Optional ostr = Optional.ofNullable(Strings.emptyToNull(ppo));